46

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

ありがとう

4

2 に答える 2

54

複数の共有ライブラリを 1 つにマージすることは、AIX を除くすべての UNIXen で事実上不可能です。リンカは .so を「最終」製品と見なします。

ただし、アーカイブを .so にマージすることは問題になりません。

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
于 2009-05-29T02:42:27.353 に答える
11

実際には不可能です。

リンカーの観点からは、SO ライブラリは、リンクに必要な再配置情報を含まない最終製品です。

両方のライブラリのソース ファイルまたはオブジェクト ファイルにアクセスできる場合は、それらから結合された SO をコンパイル/リンクするのは簡単です。

于 2009-05-27T11:17:57.063 に答える