多くのライブラリにリンクするプログラムがあります。 g++
は、対応するアーカイブが存在する場合でも、デフォルトで共有ライブラリにリンクすることを好みます。
静的アーカイブが存在する場合、動的ライブラリよりも静的アーカイブを優先するようにこの設定を変更するにはどうすればよいですか?
注:-static
オプションを使用しましたが、すべてのライブラリの静的アーカイブを見つけようとしますが、これは望んでいないものです。
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
zlib
とlibfoo
を静的として、libbar
を動的としてリンクします。 --as-needed
は、未使用の動的ライブラリを削除します。
システムライブラリを含む残りのライブラリと動的に1つまたは2つのライブラリのみを静的にリンクする場合は、多くの場合、静的ライブラリを完全な名前で単純に参照する方が簡単です。つまり-l
および-L
を使用してg ++を取得し、見つかったものからライブラリを解決するのではなく、入力としてライブラリへのフルパスを追加します。上記のg ++コマンドを使用して、main.o
アプリケーションのメインプログラムを静的libzとlibfoo、および動的libbarとlibglibなどにリンクします。
g++ main.o /usr/lib/libz.a /usr/lib/libfoo.a -lbar
編集3 8月17日:私はちょうどつまずいた この答え これはより詳細になり、ライブラリを直接指定する代替方法(-l:
)を提供します。