ldd和objdump有什么区别?

我正在运行这两个命令,并且得到不同的输出:

$ ldd `which ls`

linux-gate.so.1 => (0x00db3000)

libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0x00ba2000)

librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x007bf000)

libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0x004ce000)

libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)

libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00398000)

/lib/ld-linux.so.2 (0x00dea000)

libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a83000)

libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0x00d3d000)

然后

objdump -x `which ls` | grep NEEDED

NEEDED libselinux.so.1

NEEDED librt.so.1

NEEDED libacl.so.1

NEEDED libc.so.6

那是怎么回事?我以为他们都给了图书馆依赖?我关心的原因是我怀疑这ldd是正确的,但是我正在ARM上的linux上工作,在我看来,这没有什么废话。

回答:

您可以看到输出的差异。

objdump只是将对象本身列出的内容转储为包含未解析符号的库。

ldd列出了ld.so实际加载的库。它向后跟随该图,以便您可以看到 这些

库将加载的内容。尽管不在objdump输出中,这就是libpthread.so.0在ldd输出中结束的方式。

因此,ldd会给出运行时真正需要的东西的更好得多的画面。但是,在解决编译/链接时问题时,objdump非常有用。

以上是 ldd和objdump有什么区别? 的全部内容, 来源链接: utcz.com/qa/414483.html

回到顶部