在尝试调试某些内容时,我注意到它ldd <executable>
会显示一堆库,例如libldap_r
、libkrb5
和libroken
等。另一方面,arabin2 -l <executable>
不显示同一组库。
我已在源目录中查找来自链接或函数调用的 ldap 字符串,但它们没有显示,这意味着无论如何都不应该链接这些库。我应该怎么做才能查明这些库是否正在被使用?
答案1
rabin2 -l
显示二进制文件的直接依赖关系,IE那些在二进制文件本身中列出的内容。ldd
显示二进制文件的完全解析的依赖关系树(尽可能);这包括传递依赖。因此,如果一个二进制文件需要liba
和libb
,并且liba
需要libd
它本身需要libe
,rabin2 -l
将仅列出liba
和libb
,而ldd
将显示所有四个库(如果它们都可用)。
您可以通过列出第一个二进制文件的依赖项,然后列出每个单独的依赖项的依赖项,依此类推,直到没有识别出新的依赖项为止,ldd
手动匹配 的结果。rabin2 -l
要查明某个库是否实际被使用,您可以ltrace
在您关心的所有场景中使用二进制文件。这将识别所调用的库函数。请注意,某些库的使用将取决于配置;例如,Kerberos 库可能仅在配置了 Kerberos 的情况下才会使用。
也可以看看ldd 与 rpm -q --requires。