如果你运行:
ldd a.out
其中 a.out 是您的可执行文件的名称,它将打印该可执行文件的运行时共享库依赖项(请参阅http://linux.die.net/man/1/ldd)
这是一个示例输出:
linux-vdso.so.1 => (0x00007fff463ff000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f75f6979000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f75f65ba000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f75f62bd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f75f6c85000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f75f60a7000)
现在,一旦您知道您的应用程序正在搜索什么,您就必须知道它正在 LD 缓存(或动态链接器缓存)中搜索它。这通常存储在 /etc/ld.so.cache 中。但是,您不应该手动编辑它。相反,您应该使用 ldconfig 重新生成该缓存。
您可以使用:
ldconfig -p
显示所有缓存条目。
当你跑
ldconfig
(以 root 身份),您将重新生成 ldcache。'/lib' 和 '/usr/lib' 目录,以及在文件 '/etc/ld.so.conf' 中列出的任何目录都会被默认扫描,除非使用了 `-n'。可以在命令行上指定其他目录。
调用可执行文件时,它还将检查 LD_LIBRARY_PATH(除了 ldcache 之外)中的路径以查找 ldd 输出中列出的任何文件。
所以,你可以做的是运行:
ls -lah
在您的可执行文件的 ldd 输出中列出的每个文件上。如果缺少任何文件,您必须用 /usr/lib 或此类目录中的适当共享库 (*.so) 替换它们并重新生成 ldcache。生成缓存后,它们应显示在ldconfig -p
输出中。
如果要添加要包含在 ldconfig ldcache 生成中的新路径,可以将它们添加到 /etc/ld.so.conf 文件中。然后,下次生成 ldcache 时,它将在这些目录中搜索您的共享对象。您也可以将它们放在 /lib 或 /usr/lib 目录中。我建议不要这样做。相反,我建议使用 /usr/local/lib 目录。它通常位于 ldcache 路径中,旨在与用户生成的共享库一起使用。
希望有帮助
见: http: //linux.die.net/man/8/ldconfig
见: http: //linux.die.net/man/1/ldd
最后,“定位”命令对于查找任何路径中的文件很有用。它使用一个经常更新的数据库,所以如果该文件已经存在一段时间,它可能在定位数据库中。
您可以像这样搜索文件:
locate libstdc++.so.6
如果该文件最近已添加到路径并且不在定位数据库中,则可以运行updatedb
以重新生成定位数据库。然后,您应该能够在文件系统上找到任何文件。
有关此主题的更多信息,我建议阅读本书: http: //www.network-theory.co.uk/docs/gccintro/