Linux ldd 命令可以显示可执行文件使用的动态库。这是一个 bash 脚本。但它似乎很脆弱,并且在某些二进制文件上不起作用。有替代工具吗?
在我的具体示例中,我可以使用:
% 文件数据b2txt
datab2txt:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),静态链接,适用于 GNU/Linux 2.4.0,未剥离
但 ldd 失败:
%ldd-v datab2txt
不是动态可执行文件
答案1
您还可以这样做:
readelf -d executable | grep NEEDED
但这可能不是你想要的。它显示了executable
链接到的库,但没有显示所需的所有库(一个库可能需要另一个库)。
答案2
输出file
显示“静态链接“.ldd
仅适用于动态链接的可执行文件。
(从技术上讲,Linuxldd
所做的就是在设置环境变量后调用 Linux 可执行加载器/lib/ld-linux.so.2
。所以这应该是最可靠的方法。)
某些程序可能会使用dlopen()
加载库来避免程序对它们的硬依赖。例如,Glibc 以这种方式加载 NSS 库,因为它们的名称仅在运行时才为人所知,而不是在编译/链接时。