2009-08-17 9 views
3

ショート: 私は、依存関係にあるSOを考慮して、SOの未解決の依存関係をすべて列挙する何かを探しています。共有オブジェクトの依存関係を自動判別する方法はありますか?

ロング:

私はLinux-で共有オブジェクトに静的にコンパイルされたコードの多くを変換しています決定する簡単な方法があり、他の何のSO私の最近SOコンパイルしようとしたときに、裁判以外&エラーに依存していますそれをロードするには?

私は良い方法があると確信していますが、私はまだそれを見つけることができませんでした。

私は "ldd"を見つけましたが、それはSOがそれが依存していると言っているものだけをリストしています。 また、SOが他のSOを含んでいるかどうかを確認するためにSOが読み込まれなくなったら、 "nm"を使って把握しました。

+0

共有オブジェクトに名前を変更します。 SOはStackOverflowを意味します。 –

+0

名前を変更しました。 – Luciano

答えて

2

私はあなたのためのコードを持っていないが、私はポインタを与えることができます。

それはちょうど、グラフの問題です。特定のバイナリまたは共有オブジェクトの動的シンボルテーブルをダンプするには、objdump -Tを使用する必要があります。多くの出力が表示されますが、フラグは少し混乱することがありますが、そのシンボルが*UND*であるか、またはセグメント名(.textなど)がある場合は重要な部分です。

いつでも*UND*が表示されます。これは解決されなければならない未定義のシンボルであることを意味します。定義されたシンボルは解決の対象です。

Pythonを使用すると、必要なものを見つけることができます。

2

"ldd -r foo.so"は、foo.soに必要なシンボルのセットを出力する必要がありますが、その直接の依存関係によっては提供されません。

また、このようなリンクfoo.sofoo.oまたはbar.olibdep1またはlibdep2かのlibcで提供されていないものを使用している場合

gcc -shared -o foo.so foo.o bar.o -ldep1 -ldep2 -Wl,--no-undefined 

これは、(リンクに)失敗するはずです。

+0

"ldd -r foo.so" - > "実行可能ではない" –