如何找到应用程序的路径

如果我们想使用 ldd 查找应用程序的依赖项,我们必须提供应用程序的完整路径,我们可以通过多种方式来实现。

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

find / -name firefox

但是, find 命令的问题在于它列出了可执行文件以及 Firefox 所在的所有位置,如下所示:

/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox

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

whereis firefox

这次的输出可能如下所示:

/usr/bin/firefox
/etc/firefox
/usr/lib/firefox

然后,要查找 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 命令语法

遵守 ldd 命令的正确语法以避免错误:

ldd [OPTION]... FILE...

使用一个或者多个可用的 ldd 命令开关,插入到上述命令中的 [OPTION] 位置:

  • --help:打印此帮助并退出。
  • --version:打印版本信息并退出。
  • -d, --data-relocs:处理数据重定位。
  • -r, --function-relocs:处理数据和函数重定位。
  • -u, --unused:打印未使用的直接依赖项。
  • -v, --verbose:打印所有信息。
在 Linux 中使用“ldd”命令

如何使用 ldd 命令

执行以下命令以获取有关程序的更多信息:

ldd -v /path/to/program/executable

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

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 命令非常有用。
该命令还列出了缺失的函数和对象。

日期:2020-07-15 11:16:40 来源:oir作者:oir