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