Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.4.3 コンパイルとリンクの整合性

コンパイルとリンクを別々に実行する場合で、コンパイル時とリンク時のオプションに示すコンパイラオプションを使用する場合は、コンパイルとリンクの整合性を保つことは非常に重大な意味を持ちます。

これらのオプションのいずれかを使用してサブプログラムをコンパイルした場合は、リンクでも同じオプションを使用してください。

  • -library オプションまたは -m64 /-m32 オプションを使用してコンパイルする場合、これらの同じオプションをすべての CC コマンドに含める必要があります。

  • -compat オプションまたは -std オプションを使用してコンパイルする場合、同じまたは同等のオプションをすべての CC コマンドに含める必要があります。たとえば、-compat=5-std=sun03 は同等です。

  • -p-xpg-xprofile オプションの場合、ある段階ではオプションを指定して別の段階では指定しないと、プログラムの正しさには影響はありませんが、プロファイリングができなくなります。

  • -g[n] および -xdebuginfo を使用して、1 つのフェーズにそのオプションを取り込み、ほかのフェーズからそのオプションを除外すると、プログラムの正確さには影響しませんが、プログラムをデバッグする機能に影響します。これらのオプションのいずれかでコンパイルされず、-g[n] または -xdebuginfo とリンクされているモジュールは、デバッグ用に正しく作成されません。デバッグには、通常、–g[n] オプションまたは -xdebuginfo オプションを指定して関数 main を含むモジュールをコンパイルする必要があります。

次の例では、-library=stlport4 コンパイラオプションを使用してプログラムをコンパイルしています。

example% CC -library=stlport4 sbr.cc -c
example% CC -library=stlport4 main.cc -c
example% CC -library=stlport4 sbr.o main.o -o myprogram 

-library=stlport4 を一貫して使用しない場合は、プログラムの特定の部分はデフォルトの libCstd を使用し、ほかの部分はオプションの置換である STLport ライブラリを使用します。結果として得られたプログラムは正常にリンクできず、どのような状況でも正常に動作しません。

プログラムがテンプレートを使用する場合は、リンク時に一部のテンプレートがインスタンス化される可能性があります。その場合、インスタンス化されたテンプレートは最終行 (リンク行) のコマンド行オプションを使用してコンパイルされます。