微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

unix – 库依赖性工具

我正在Unix平台上查找工具/命令,以检测.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 -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

原文地址:https://www.jb51.cc/bash/383761.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐