静的ライブラリを共有ライブラリに変換しますか?
-
19-08-2019 - |
質問
主に多数の静的(.a
)ライブラリファイルで構成されるサードパーティライブラリがあります。これを単一の.so
ライブラリファイルにコンパイルできますが、実際には単一の.o
共有ライブラリファイルである必要があります。
静的な<=>ファイルを共有<=>ファイルに変換する方法はありますか?または、より一般的には、膨大な数の静的<=>ファイルといくつかの<=>オブジェクトファイルを単一の<=>ファイルに結合する良い方法がありますか?
解決
これを行います(適切な-Lを使用して)
gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib
しない?
他のヒント
静的ライブラリ内のオブジェクトが-fPICなどを使用せずにコンパイルされた場合、これを行うことはできません。
g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object
gccについてはわかりませんが、g ++の場合は--whole-archiveリンカーオプションを追加して、共有ライブラリに静的ライブラリのオブジェクトを含める必要がありました。 libc_static_lib.aとlibother_shared_object.soにリンクするが、それらを全体としてmegalib.soに含めない場合は、-no-whole-archiveオプションが必要です。
ar -x lib***.a
gcc -shared *.o -o lib***.so
ar -x
は、.a
sの特定のオブジェクトに焦点を合わせたい場合や、自分で何も追加したくない場合にも役立ちます。
例:
ar -x lib***.a
gcc -shared *.o -o lib***.so
所属していません StackOverflow