使用 LDD 用于显示任何给定程序所需的共享库的命令 - 对于缺少依赖项时的运行非常有用。该命令还列出了缺少的函数和对象。
ldd命令语法
请注意ldd命令的正确语法以避免错误:
ldd 选项 …文件…
使用插入到的一个或多个可用的ldd命令开关 选项 在上面的命令中找到: --help |打印此帮助并退出 --version |打印版本信息并退出 -d, - data-relocs |过程数据重定位 -r, - function-relocs |处理数据和功能重定位 -u, - 未使用|打印未使用的直接依赖项 -v, - verbose |打印所有信息 执行以下命令以获取有关程序的更多信息: $ 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 path / to / program
输出类似于以下内容: 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命令,因为ldd可能实际执行它。相反,使用更安全的替代方案,只显示直接依赖关系,而不是整个依赖关系树: $ objdump -p / path / to / program |需要grep 如果要使用ldd查找其依赖关系,则必须提供应用程序的完整路径,您可以通过多种方式执行此操作。 例如,这是您找到Firefox路径的方式: $ find / -name firefox
但是,find命令的问题在于它不仅会列出可执行文件,而且会列出Firefox所在的位置,如下所示: 这种方法有点过分,您可能需要使用sudo命令来提升您的权限,否则您可能会获得许多权限被拒绝的错误。 相反,使用whereis命令查找应用程序的路径要容易得多: $ 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是库的名称,十六进制数是库将加载到内存中的地址。 你会注意到许多其他行,=>符号后跟一个路径。这是物理二进制文件的路径;十六进制数是加载库的地址。 如何使用ldd命令
如何找到应用程序的路径