查找二进制文件链接的库


40

我知道有一个命令可以列出与软件链接的库和各个版本。

有ld或libtool吗?

但是我只是不记得了。在Google上花费了一些时间,但没有提出任何有用的建议。

当我发现在MacOS X上执行类似操作时,更新
ldd <binary>将对linux有所帮助(来自 @ Ernelliotool -L <binary>


Answers:


41

试试ldd binary-exec

例:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

ang!所以我的第一次尝试是对的。只需要将其安装在我的Mac上,这样它就会清楚地知道命令;-)
er4z0r 2011年

@ er4z0r:仅供参考,Mac OS是BSD,而不是Linux
grawity 2011年

6
grwaity:您说得对。虽然ldd在Linux上有帮助,但我发现'otool -L <binary>'可以执行类似的操作。
er4z0r 2011年

15

要查找直接需要的内容:

readelf -d APP | grep NEEDED

ldd如在其他地方提到的,它将显示所有直接和间接库-运行时所需的一切。这可能不是一个完整的列表,因为您可以使用dlopen()动态打开内容,但这应该有99%的时间起作用。

ld和libtool在编译/链接时使用。一旦您有了应用程序,它们就没有用了。

编辑我可以在以后询问您有关OSX的答案中看到,但是我想在Linux工具上添加我的答案:

很久以前,我忘了提到一件事。您询问版本。无论是ldd还是readelf会回答“是什么版本”的问题。他们会告诉您要查找的库的文件名,命名约定可能包含一些版本信息,但是没有任何内容可以强制执行此操作。符号可能已经过版本控制,您可能需要花更多的时间nm才能看到这些符号,


9

另一种方法是使用objdump。

objdump -x“二进制” | 需要grep

这仅显示了此二进制文件所需的所有依赖关系。很有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.