12

およびファイルの依存関係を検出するためのtool/ commandonUnixプラットフォームを探しています。library.so.o

私はすでに//を使用しましたlddnmtrussライブラリの依存関係を検出するための適切なアプローチがわかりません。

4

1 に答える 1

18

これは、「ライブラリの依存関係の検出」が正確に何を意味するかによって異なります。

このlddコマンドは、実行可能ファイルだけでなく、共有ライブラリでも機能します。ライブラリが構築されたときに宣言された共有ライブラリの依存関係が表示されます。

$ ldd /usr/lib/libgtk-3.so
    linux-vdso.so.1 (0x00007ffff8fff000)
    libgdk-3.so.0 => /usr/lib/libgdk-3.so.0 (0x00007f43fcf47000)
    libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f43fcd43000)
    libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007f43fcb36000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f43fc7fc000)
...

ライブラリには、依存関係として宣言されていない他のライブラリとリンクすることによって取得される未定義のシンボルを含めることができます。objdump -Tまたはを使用nm -Dして動的シンボルを表示できます-未定義のシンボル(他のライブラリから取得する必要があるシンボル)は次のように表示され*UND*ます:

$ objdump -T /usr/lib/libgtk-3.so | head

/usr/lib/libgtk-3.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000066e38 l    d  .init  0000000000000000              .init
0000000000000000      DF *UND*  0000000000000000              g_param_spec_object
0000000000000000      DF *UND*  0000000000000000              g_utf8_validate
0000000000000000      DF *UND*  0000000000000000              g_date_get_month
0000000000000000      DF *UND*  0000000000000000              g_bookmark_file_get_visited
0000000000000000      DF *UND*  0000000000000000              g_value_get_float

これらのシンボル名から、宣言されていないライブラリの依存関係を推測できるはずです。

または同様の構成メカニズムを使用するライブラリはpkg-config、ビルド時に依存関係を宣言できない場合がありますが、依存関係を宣言しpkg-configます。ライブラリユーザーがツールを使用して依存関係を取得することに依存します。pkg-config --libsコンパイラが理解できる形式で依存関係を一覧表示します。

$ pkg-config --libs gtk+-3.0
-lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0  
于 2012-11-21T21:45:15.703 に答える