在Linux中使用“ldd”命令

ldd命令可用于向您显示任何给定程序所需的共享库。

这对解决何时存在缺失依赖关系以及可用于列出缺少的函数和对象很有用。

ldd命令语法

这是使用ldd命令时的正确语法

ldd [选项] ...文件...

以下是可用的ldd命令开关,可将其插入上述命令的[OPTION]点中:

--help打印此帮助并退出--version打印版本信息并退出-d,--data-relocs进程数据重定位-r,--function-relocs进程数据和函数重定位-u,--unused打印未使用的直接依赖关系-v,--verbose打印所有信息

如何使用ldd命令

您可以使用以下命令从任何ldd命令获取更多信息:

ldd -v / path / to / program / executable

输出显示版本信息以及共享库的路径和地址,如下所示:

ldd libshared.so linux-vdso.so.1 =>(0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2(0x00007ff1dfafe000)

如果SO文件根本不存在,则可以使用以下命令找到缺失的库:

ldd -d路径/到/程序

输出与以下类似:

linux-vdso.so.1(0x00007ffc2936b000)/home/gary/demo/garylib.so => not foundlibc.so.6 => usr / lib / libc.so.6(0x00007fd0c6259000)/ lib64 / ld-linux-x86 -64.so.2(0x00007fd0c65fd000)

重要信息:不要针对不受信任的程序运行ldd命令,因为该命令可能实际执行该命令。 这是一个更安全的方法,只显示直接依赖关系,而不显示整个依赖关系树: objdump -p / path / to / program | grep需要

如何找到应用程序的路径

如果要使用ldd查找依赖关系,则必须提供应用程序的完整路径,您可以采用多种方法。

例如,这就是你如何找到Firefox的路径:

找到/ -name firefox

然而find命令的问题在于,它不仅会列出可执行文件,而且还会列出Firefox所在的位置,如下所示:

这种方法有点矫枉过正,你可能需要使用sudo命令来提升你的权限,否则你很可能会获得许多被拒绝的权限错误。

使用whereis命令来查找应用程序的路径要容易得多:

其中firefox

这次输出可能如下所示:

在/ usr / bin中/火狐

在/ etc /火狐

/ usr / lib中/火狐

现在您只需键入以下命令即可找到用于Firefox的共享库:

ldd / usr / bin / firefox

命令的输出将如下所示:

linux-vdso.so.1(0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0(0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2(0x00007feb98f76000)
libstdc ++。so.6 => /usr/lib/libstdc++.so.6(0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6(0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1(0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6(0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2(0x00007feb99397000)

linux-vdso.so.1是库的名称,十六进制数是库在内存中的加载地址。

您会注意到许多其他行上=>符号后面跟着一条路径。 这是物理二进制文件的路径; 十六进制数是库将被加载的地址。