Skip to main content

使用“ldd”命令查找程序的共享库

5-Qt链接动态库与静态库 (七月 2025)

5-Qt链接动态库与静态库 (七月 2025)
Anonim

使用 LDD 用于显示任何给定程序所需的共享库的命令 - 对于缺少依赖项时的运行非常有用。该命令还列出了缺少的函数和对象。

ldd命令语法

请注意ldd命令的正确语法以避免错误:

ldd 选项 …文件…

使用插入到的一个或多个可用的ldd命令开关 选项 在上面的命令中找到:

--help |打印此帮助并退出 --version |打印版本信息并退出 -d, - data-relocs |过程数据重定位 -r, - function-relocs |处理数据和功能重定位 -u, - 未使用|打印未使用的直接依赖项 -v, - verbose |打印所有信息

如何使用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 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所在的位置,如下所示:

  • /etc/skel/.mozilla/firefox
  • /家//缓存/ Mozilla浏览器/火狐
  • /home//.mozilla/firefox
  • 在/ usr / bin中/火狐
  • / usr / lib目录/火狐
  • / usr / lib目录/火狐/火狐

这种方法有点过分,您可能需要使用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是库的名称,十六进制数是库将加载到内存中的地址。

你会注意到许多其他行,=>符号后跟一个路径。这是物理二进制文件的路径;十六进制数是加载库的地址。