首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库依赖工具

库依赖工具
EN

Stack Overflow用户
提问于 2012-11-22 03:28:26
回答 1查看 10K关注 0票数 12

我正在寻找Unix平台上的tool/command来检测.so.o文件的library依赖关系。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 05:45:16

这取决于“检测库依赖项”到底是什么意思。

ldd命令适用于共享库,而不仅仅是可执行文件。它将显示构建库时声明的共享库的依赖关系:

代码语言:javascript
复制
$ 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*

代码语言:javascript
复制
$ 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将以编译器能够理解的格式列出依赖项:

代码语言:javascript
复制
$ 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  
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13500658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档