工具库的依赖(Tool for Library Dependency)

2019-07-04 01:05发布

我正在寻找的tool / commandUnix平台检测library中的依赖关系.so.o文件。

我已经使用了ldd / nm / truss ,但我不知道正确的方法来检测库的依赖。

Answer 1:

这取决于究竟是“检测库​​的依赖”的意思。

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 -Tnm -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  


文章来源: Tool for Library Dependency