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

印刷ビューの終了

更新: 2016 年 7 月
 
 

11.5 標準ライブラリの静的リンク

CC ドライバは、各デフォルトライブラリの -llib オプションをリンカーに渡すことによって、libclibm などのいくつかのライブラリの共有バージョンにデフォルトでリンクします。(デフォルトのライブラリのリストについては、デフォルトの C++ ライブラリを参照してください。)

このようにデフォルトのライブラリを静的にリンクする場合、-library オプションと –staticlib オプションを一緒に使用できます。例:

example% CC test.c -staticlib=Crun

この例では、-library オプションが明示的にコマンドに指定されていません。この場合、標準 -compat=5 モードでは -library のデフォルト設定が Cstd,Crun であるため、-library オプションは不要です。

あるいは、-xnolib コンパイラオプションも使用できます。-xnolib オプションを指定すると、ドライバは自動的には -l オプションを ld に渡しません。次の例は、libCrun と静的に、libm および libc と動的にリンクする方法を示します。

example% CC test.c -xnolib -lCstd -Bstatic -lCrun -Bdynamic -lm -lc

-l オプションの順序は重要です。-lCstd-lCrun、および -lm オプションは、-lc の前に表示します。


注 - libCrun および libCstd を静的にリンクすることはお勧めできません。/usr/lib 内の動的バージョンは、インストール先の Oracle Solaris のバージョンで動作するよう構築します。

ほかのライブラリにリンクする CC オプションもあります。そうしたライブラリへのリンクも -xnolib によって行われないように設定できます。たとえば、-mt オプションを指定すると、CC ドライバは、-lthreadld に渡します。これに対し、-mt-xnolib の両方を使用すると、CC ドライバは ld-lthread を渡しません。詳細は、–xnolibを参照してください。ld の詳細については、Oracle Solaris 11.3 リンカーとライブラリガイドを参照してください。


注 - /lib および /usr/lib にある Oracle Solaris ライブラリの静的バージョンは、もう使用できません。たとえば、libc を静的にリンクしようとすると失敗します。
      CC hello.cc -xnolib -lCrun -lCstd -Bstatic -lc