c - ldd 命令在某个任意位置搜索库

标签 c shared-libraries

我在可执行文件上运行 truss 命令并得到以下输出:

stat64("/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/rw7/librt.so.1", 0x080474A0)(正在 sleep ...) stat64("/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/rw7/librt.so.1", 0x080474A0) Err#2 ENOENT stat64("/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/librt.so.1", 0x080474A0)(正在 sleep ...)

我查看了 buildhost 的构建日志和环境,但 LD_LIB_PATH、LIBPATH、LD_RUN_PATH 值未指向此位置。我无法从该值的来源获得该值?

有人可以帮助我理解这一点吗? lib搜索路径是如何决定的?同样的情况如何解决?

最佳答案

也许这个库是您的应用程序的某些依赖项的依赖项。 ldd 递归地打印您的应用程序或其依赖项所依赖的所有共享库。

它在 /etc/ld.so.conf (/etc/ld.so.conf.d/) 或 LD_LIBRARY_PATH 中描述的路径中搜索库。

请注意,rpath 也可以在共享库本身中设置。

更多信息请点击:Program-Library-HOWTO

关于c - ldd 命令在某个任意位置搜索库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864882/

相关文章:

c - 当我们在c中使用fork时,进程之间是否共享数据?

c - 将 uint 写入/读取到二进制文件

c - 使用环形缓冲区和 pthread 的生产者 - 消费者

windows - 在Windows下编译.so

来自 ICC 的 _PGOPTI_Prof_Dump_All() 的 Clang 或 GCC 等价物

java - 为什么它甚至可以编译? - 使用 swig 生成的类从 java 编译和运行 native 方法

c - 如何根据标准 C 中的合法字符验证字符串?

c - bsearch 和搜索范围?

linux - 确定 Linux 中二进制文件的目标 ISA 扩展名(库或可执行文件)

linux - 该二进制文件需要哪些库才能运行?