組み込みのアトミック操作は gcc-4.1.2 で導入されました。ただし、gcc 3.4.3 しかない OpenIndiana で gcc を使用しています。今私の質問は、gcc 3.4.3 でアトミック操作を使用する方法ですか? さらに、OpenIndiana で gcc 4.6.1 を使用しようとしましたが、いくつかのランタイム ライブラリについて不平を言うため、機能しません。うまく使った人いたら教えてください。
4 に答える
GCC コンパイラをアップグレードすることをお勧めします。GCC 3は古いものです。
GCC の新しいバージョンをインストールできない場合は、ソース コードから GCC 4.6.1 コンパイラをコンパイルしてみてください。(ソース ツリーの外にあるビルド ツリーでコンパイルすることを忘れないでください。また、すべての依存関係を忘れないでください)。
GCC 4.6.1 のコンパイルが失敗した理由について言及も説明もしていません。どのランタイム ライブラリについて不満がありましたか? インストール後にldconfigを実行しましたか?
GCC は優れたインライン アセンブリ サポートを備えているため__asm
、さまざまなアトミック op の独自のバリアントを作成するために使用できます。ただし、ターゲット プラットフォームに固有であるため、適切なバージョンに切り替えるには適切なマクロが必要です。
atomic_ops(3C)
Solaris では、代わりに libcインターフェイスにフォールバックすることもできます。これらはインライン化される場合とされない場合がありますが、使用するコンパイラに関係なく、常に使用できる (そして常に同じように動作する) ことが保証されています。
それ以上に、gcc をアップグレードするか、SunStudio 12.2 コンパイラを入手するか、またはその両方を提案します(これらはロイヤリティ フリーです。テスト目的でのみ使用する場合でも、動作するように作ればコードの品質が向上する傾向があります)。複数のコンパイラで ...)。はい、OpenSolaris ベースのディストリビューションにもインストール/実行できます。
既存の回答に追加するには、Spec Files Extra Repositoryを見ましたか? 自分で使ったことはありませんが、gcc 4.6 コンパイラ パッケージを提供しているようです。