Oracle® Developer Studio 12.5: C ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

3.2.3 実装上の注意

実行可能ファイルや共有ライブラリなどの複数のコンポーネントが不可分実行時を必要とするとき、各コンポーネントを適切な –xatomic オプションで動的にリンクして、正しい動的依存関係を作成するようにしてください。ライブラリがリンクされるときに不可分オプションの提供を必要とする共有ライブラリを生成しないようにしてください。

同じプロセス内で両方の実行時ライブラリを使用することは、次の理由によりお勧めしません。

  • 一部の不可分型では、同期を実行するために実行時サポートライブラリの呼び出しが必要です。2 つの実行時システムは内部データ構造が異なるため、2 つのライブラリは同じオブジェクトを同期できません。

  • Oracle Developer Studio ライブラリ libstatomiclibatomic と同じ関数の大域シンボル名を使用します。同じプロセス内で両方のライブラリが使用された場合、実行可能ファイルまたはライブラリが予期しないライブラリ内の関数を呼び出す可能性があります。

両方の実行時ライブラリを使用しようとするプログラムは最初は動作するようにみえますが、失敗する可能性が高くサポートできません。


注 -  –latomic を使用したリンクは、/usr/lib/libatomic.so.1 を使用したリンクになりません。このライブラリは GCC 実装で、主として、互換性のあるライブラリが Oracle Solaris および Linux でリリースされるまで GCC で使用されるためのものです。

不可分演算の多くはインライン化されるため、アプリケーションは不可分実行時ライブラリに依存せずに不可分機能を使用できる可能性があります。動作は実装に固有となるため、コンパイラをアップグレードした場合に結果が変化する可能性があります。使用するアプリケーションがスカラー型の不可分型 (flagscharintlong、または pointers) のみ使用し、x86 プラットフォーム上で構築される場合、生成されるバイナリで libstatomic が不要となることがあります。そのようなアプリケーションまたはライブラリを –xatomic=none オプションでコンパイルしてみて、正しくリンクされ実行されるか確認することもできます。