主に多数の静的 ( .a) ライブラリ ファイルで構成されるサードパーティ ライブラリがあります。これを単一の.aライブラリ ファイルにコンパイルできますが、実際には単一の.so共有ライブラリ ファイルにする必要があります。
静的.aファイルを共有.soファイルに変換する方法はありますか? または、より一般的には、膨大な数の静的.aファイルをいくつかの.oオブジェクト ファイルと組み合わせて 1 つの.soファイルにする良い方法はありますか?
主に多数の静的 ( .a) ライブラリ ファイルで構成されるサードパーティ ライブラリがあります。これを単一の.aライブラリ ファイルにコンパイルできますが、実際には単一の.so共有ライブラリ ファイルにする必要があります。
静的.aファイルを共有.soファイルに変換する方法はありますか? または、より一般的には、膨大な数の静的.aファイルをいくつかの.oオブジェクト ファイルと組み合わせて 1 つの.soファイルにする良い方法はありますか?
これを行います(もちろん、適切な -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 リンカー オプションを追加して、静的ライブラリのオブジェクトを共有オブジェクトに含める必要がありました。--no-whole-archive オプションは、libc_static_lib.a および libother_shared_object.so にリンクしたいが、それらをまとめて megalib.so に含めたくない場合に必要です。
ar -x.aから特定のオブジェクトに焦点を当てたいが、自分で何も追加したくない場合にも役立ちます。
例:
ar -x lib***.a
gcc -shared *.o -o lib***.so