およびファイルの依存関係を検出するためのtool
/ command
onUnix
プラットフォームを探しています。library
.so
.o
私はすでに//を使用しましたldd
がnm
、truss
ライブラリの依存関係を検出するための適切なアプローチがわかりません。
およびファイルの依存関係を検出するためのtool
/ command
onUnix
プラットフォームを探しています。library
.so
.o
私はすでに//を使用しましたldd
がnm
、truss
ライブラリの依存関係を検出するための適切なアプローチがわかりません。
これは、「ライブラリの依存関係の検出」が正確に何を意味するかによって異なります。
この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