a.so と b.so があるとします。a と b によってエクスポートされたすべての関数を含む単一の共有ライブラリとして c.so を生成できますか?
私は試した
gcc -shared -Wl,soname,c.so -o c.so a.so b.so
しかし、うまくいきません。
aa と bo を aa と ba (これは ao と bo を変更すべきではありません) にアーカイブして、
gcc -shared -Wl,soname,c.so -o c.so aa ba
ありがとう
a.so と b.so があるとします。a と b によってエクスポートされたすべての関数を含む単一の共有ライブラリとして c.so を生成できますか?
私は試した
gcc -shared -Wl,soname,c.so -o c.so a.so b.so
しかし、うまくいきません。
aa と bo を aa と ba (これは ao と bo を変更すべきではありません) にアーカイブして、
gcc -shared -Wl,soname,c.so -o c.so aa ba
ありがとう
複数の共有ライブラリを 1 つにマージすることは、AIX を除くすべての UNIXen で事実上不可能です。リンカは .so を「最終」製品と見なします。
ただし、アーカイブを .so にマージすることは問題になりません。
gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
実際には不可能です。
リンカーの観点からは、SO ライブラリは、リンクに必要な再配置情報を含まない最終製品です。
両方のライブラリのソース ファイルまたはオブジェクト ファイルにアクセスできる場合は、それらから結合された SO をコンパイル/リンクするのは簡単です。