1

一連の静的ライブラリを共有ライブラリに変換していますが、共有ライブラリを正常に作成できました。静的ライブラリとリンクするとライブラリに未解決のシンボルが含まれる可能性がありますが、共有ライブラリの場合はそうではないため、問題はexeにあります。共有ライブラリ内のすべてのシンボルが解決されるはずです。

例: PROG1 は LIB1.a を呼び出します LIB2.a を呼び出します PROG1 が LIB1.a を呼び出しても LIB2.a を呼び出さないため、PROG1 のメイク ファイルに LIB2.a を含める必要はありません。未解決のまま。

変換後 LIB1.so と LIB2.so の両方を PROG1 のメイクファイルに含める必要があります。LIB2.so を含めると、LIB1.so のリンケージの問題はほとんど解決されませんが、LIB2.so を含めることで新しい問題が発生します (LIB3.so に依存する可能性があるため)。

SO共有ライブラリのすべての依存ライブラリを見つける方法はありますか?
ldd を使用してみましたが、何も出力されません。

私の分析が間違っていたら教えてください。

4

1 に答える 1

1

これは少し個人的な意見ですが、共有ライブラリをリンクして、未解決のシンボル (with ) に対してエラーが発生するようにする必要があると思います-z defs。つまり、各ライブラリを個別に整理し、リンク時に厄介な驚きが発生しないことを意味します。

もちろん、これは、ライブラリがクリーンで、再帰的な依存関係が含まれていない場合impl_1.soにのみ機能します (これはおそらく悪いことです) 。実行時のクライアント。ただし、リンク時の依存関係だけがある場合はうまく機能します。impl_2.soimpl3_.soclient.so

実際、これを行わず、リンクを行うのldではなく使用している場合cc、表示されているもののほとんどが得られます-依存関係はなく、リンク時のエラー

于 2013-06-05T16:42:26.890 に答える