リンカーとライブラリ

共有オブジェクトとアーカイブとの混合体へのリンク

動的モードでのライブラリ検索メカニズムでは、指定されたディレクトリを調べて共有オブジェクトを検索し、次にアーカイブライブラリを検索しますが、-B オプションを使用すると必要な検索タイプのより適切なコントロールを保存できます。

コマンド行上に -Bdynamic-Bstatic オプションを必要な回数だけ指定することによって、ライブラリ検索は共有オブジェクトまたはアーカイブをそれぞれ切り替えることができます。たとえば、アーカイブ libfoo.a と共有オブジェクト libbar.so とリンクするには、次のコマンドを発行します。


$ cc -o prog main.o file1.c -Bstatic -lfoo -Bdynamic -lbar 

キーワード -Bstatic-Bdynamic は、正確には対称ではありません。-Bstatic を指定すると、リンカーは、次の -Bdynamic の発生まで入力として共有オブジェクトを受け入れませんが、-Bdynamic を指定すると、リンカーは、指定されたディレクトリ内で、まず最初に共有オブジェクトを検索し、次にアーカイブを検索します。

上記の例をより正確に説明すると、リンカーは、最初に libfoo.a を検索し、次に libbar.so を検索します。そしてこれに失敗すると libbar.a を検索します。最後に、libc.so を検索し、これに失敗すると libc.a を検索します。