如何找到应用程序的路径
如果我们想使用 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:打印所有信息。
如何使用 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