静的にリンクするライブラリをgcc
に伝えるために-Wl,-Bstatic
を使用するのは奇妙に感じます。結局、私はgcc
に、ライブラリとのリンクに関する他のすべての情報(-Ldir
、-llibname
)を直接伝えています。
どのライブラリを静的にリンクする必要があるかをgccドライバーに直接伝えることは可能ですか?
明確化:特定のライブラリが静的バージョンのみに存在する場合、-Wl,-Bstatic
なしで使用することは知っていますが、静的ライブラリを優先するためにgcc
を暗示したいと思います。また、ライブラリファイルを直接指定するとリンクされることも知っていますが、静的ライブラリと動的ライブラリを同じように含めるためのセマンティックを維持することを好みます。
もちろん、-l:
の代わりに-l
を使用することもできます。たとえば、-l:libXYZ.a
はlibXYZ.a
とリンクします。 lib
に自動展開される-lXYZ
とは対照的に、libXYZ
が書き出されていることに注意してください。
リンクコマンドで.aファイルを追加できます。
gcc yourfiles /path/to/library/libLIBRARY.a
しかし、これはgccドライバーではなく、-Wl,anything
のようなオプションとしてld
リンカーと話します。
Gccまたはldに「-Ldir -lLIBRARY」を指定すると、リンカーはライブラリの静的バージョンと動的バージョンの両方をチェックします(-Wl,--verbose
でプロセスを確認できます)。チェックされるライブラリタイプの順序を変更するには、-Wl,-Bstatic
および-Wl,-Bdynamic
を使用できます。 gnu LDのmanページは次のとおりです。 http://linux.die.net/man/1/ld
プログラムをlib1、lib3に動的に、lib2に静的にリンクするには、次のようなgcc呼び出しを使用します。
gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3
ldのデフォルト設定が動的ライブラリを使用することを想定しています(Linuxの場合)。