19

GCC/Linux で共有ライブラリを構築する際に問題があります。現在、この共有ライブラリは GCC/libtool オプション「-shared」で作成されており、すべて問題ありません。

共有ライブラリに必要な機能を提供するため、この共有ライブラリに追加する必要がある 2 つの追加の静的ライブラリ (.a ファイル) があります。オプション「-l」を使用してこれらの静的ライブラリを追加しても役に立ちません。その後、それらは .so ファイルの一部ではなくなります。

では、GCC/libtool にこれらの静的ライブラリのコードを共有ライブラリに実際に追加させるにはどうすればよいでしょうか?

ありがとう!

4

2 に答える 2

26

--whole-archiveこの場合、静的ライブラリのコンテンツ全体を共有ライブラリに含めるようにリンカに命令するには、リンカオプションが必要です。

g++ -shared sample.o -o libSample.so -Wl,-whole-archive -lmylib1.a -lmylib2.a -Wl,-no-whole-archive

差出人man ld

コマンドラインで--whole-archiveオプションの後に記載されているアーカイブごとに、アーカイブで必要なオブジェクトファイルを検索するのではなく、アーカイブ内のすべてのオブジェクトファイルをリンクに含めます。これは通常、アーカイブファイルを共有ライブラリに変換するために使用され、すべてのオブジェクトが結果の共有ライブラリに含まれるようにします。このオプションは複数回使用できます。

gccからこのオプションを使用する場合の2つの注意事項:まず、gccはこのオプションを認識しないため、-Wl、-whole-archiveを使用する必要があります。次に、アーカイブのリストの後に-Wl、-no-whole-archiveを使用することを忘れないでください。これは、gccが独自のアーカイブのリストをリンクに追加し、このフラグがそれらにも影響を与えないようにするためです。

于 2013-02-15T08:22:28.323 に答える
3

リンカーにライブラリを強制的に含めるには--whole-archiveパラメーターのみが必要ですが、一致しないシンボルから独自のニーズを推測できるはずです。

コマンドラインの静的ライブラリは、依存するオブジェクトファイルの後に来るようにしてください。

g++ -Wl,-E -g -pipe -O2 -pipe -fPIC  myobjectfile.o mystaticlibrary.a -shared -o mylib.so
于 2015-04-30T17:00:06.680 に答える