web-dev-qa-db-ja.com

ライブラリを静的にリンクするようにgccに直接指示する

静的にリンクするライブラリをgccに伝えるために-Wl,-Bstaticを使用するのは奇妙に感じます。結局、私はgccに、ライブラリとのリンクに関する他のすべての情報(-Ldir-llibname)を直接伝えています。

どのライブラリを静的にリンクする必要があるかをgccドライバーに直接伝えることは可能ですか?

明確化:特定のライブラリが静的バージョンのみに存在する場合、-Wl,-Bstaticなしで使用することは知っていますが、静的ライブラリを優先するためにgccを暗示したいと思います。また、ライブラリファイルを直接指定するとリンクされることも知っていますが、静的ライブラリと動的ライブラリを同じように含めるためのセマンティックを維持することを好みます。

107

もちろん、-l:の代わりに-lを使用することもできます。たとえば、-l:libXYZ.alibXYZ.aとリンクします。 libに自動展開される-lXYZとは対照的に、libXYZが書き出されていることに注意してください。

153
Radek

リンクコマンドで.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の場合)。

115
osgx