如何显示 Linux 中可执行文件使用的所有共享库?

我们知道共享库是可以在运行时链接到任何程序的库。为了查看可执行文件使用的所有共享库,我们使用名为ldd的 Linux 命令实用程序。我们可以很容易地在 Linux 机器上找到共享库,因为它们通常以 lib* 前缀开头。

我们先来了解和看看如何使用Linux提供给我们的ldd命令的例子。

Ldd是 Linux 为我们提供的命令实用程序,主要用于我们想知道可执行文件甚至共享库的共享库依赖项的情况。

LDD 语法

ldd [OPTION] .. FILE ..

上述命令中的 [OPTION] 占位符可以替换为 ldd 命令为我们提供的标志,其中一些最常见的是 -

  • -v - 打印所有信息

  • -d - 处理数据重定位

  • -u - 用于打印未使用的直接依赖项

  • -r - 处理数据和函数重定位

现在我们对 ldd 命令有了一些了解,让我们探索它的一些示例,在这些示例中我们将显示可执行文件的依赖项等等。

示例 1

命令

ldd /bin/cp

在上面的命令中,我们在 linux 目录的 /bin 文件夹中存储的名为cp的可执行文件上运行 ldd 命令。

输出结果

linux-vdso.so.1 => (0x00007fffaf3ff000)
libselinux.so => /lib64/libselinux.so (0x0000003a06a00000)
librt.so => /lib64/librt.so (0x0000003a06200000)
libacl.so.1 => /lib64/libacl.so (0x0000003a13000000)
libattr.so.1 => /lib64/libattr.so (0x0000003a0ea00000)
libc.so.3 => /lib64/libc.so.3 (0x0000003a05200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003a05a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003a04a00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003a05600000)

我们还可以在下面示例中显示的命令的帮助下显示可执行文件的未使用的直接依赖项

示例 2

命令

ldd -u /bin/cp
输出结果
Unused direct dependencies:

/lib64/libselinux.so.1
/lib64/librt.so.1
/lib64/libacl.so.1
/lib64/libattr.so.1