我在可执行文件上运行truss命令,得到以下输出:
stat64("/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/rw7/librt.so.1",0x080474A0) (休眠...)stat64("/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/rw7/librt.so.1",0x080474A0) Err#2环境stat64("/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/librt.so.1",0x080474A0) (休眠...)
我查看了buildhost的构建日志和环境,但是LD_LIB_PATH、LIBPATH、LD_RUN_PATH值没有指向这个位置。我不能得到这个值的来源?
有人能帮助我理解这一点吗?库的搜索路径是如何决定的?如何解决同样的问题?
发布于 2010-10-06 21:03:42
谢谢你们的帮助。我找到问题了。有人已经删除了/opt/studio11目录,并建立了到/net/xyzmachine/vol/tools/solx64/studio11链接。因此在编译过程中,它将我显示为/opt/studio11/....但在map文件中,它保留了"net/xyzmachine/vol/tools/solx64/studio11“的值。
再次感谢您的帮助。
发布于 2010-10-05 23:06:21
也许这个库依赖于你的应用程序的一些依赖项。ldd递归地打印您的应用程序或其依赖项所依赖的所有共享库。
它在/etc/ld.so.conf (/etc/ld.so.conf.d/)或LD_LIBRARY_PATH中描述的路径中搜索库。
请注意,还可以在共享库本身中设置rpath。
更多信息请点击此处:Program-Library-HOWTO
发布于 2010-10-05 23:07:41
用于创建可执行文件的链接器可能已将某些路径直接硬编码到可执行文件中。大多数链接器在缺省情况下都会这样做,并允许在命令行上指定选项,以添加特定的附加路径来查找.so库。
https://stackoverflow.com/questions/3864882
复制相似问题