C ldd命令在任意位置搜索libs
我在可执行文件上运行了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 enoint stat64(“/net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/librt.so.1”,0x080474A0)(睡眠…) 我查看了buildhost的构建日志和环境,但是LD_LIB_PATH、LIBPATH、LD_RUN_PATH值没有指向此位置。我不能从这个值的来源得到它C ldd命令在任意位置搜索libs,c,shared-libraries,C,Shared Libraries,我在可执行文件上运行了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 enoint stat64(“/net/xyzmachine
有人能帮我理解这一点吗?库搜索路径是如何决定的?如何排除相同的故障 这个库可能是应用程序的某些依赖项的依赖项
ldd
递归打印应用程序或其依赖项所依赖的所有共享库
它在/etc/ld.so.conf
(/etc/ld.so.conf.d/)或ld_LIBRARY_PATH中描述的路径中搜索库
请注意,还可以在共享库本身中设置rpath
此处的更多信息:用于创建可执行文件的链接器可能直接在可执行文件中硬编码了某些路径。
默认情况下,大多数链接器都会这样做,并允许在命令行上指定选项以添加要查找的特定附加路径。因此,库。看起来您可能在可执行文件中设置了rpath。尝试: chrpath /path/to/binary chrpath/path/to/binary 看看有没有打印出像你从ldd得到的路径。要删除rpath并使用标准系统库,请使用: chrpath -d /path/to/executable chrpath-d/path/to/executable
谢谢你们的帮助。我发现了问题。有人删除了/opt/studio11目录,并链接到/net/xyzmachine/vol/tools/solx64/studio11。所以在编译过程中,它显示为/opt/studio11/。。。。但在映射文件中,它保留了“net/xyzmachine/vol/tools/solx64/studio11”值
再次感谢您的帮助。谢谢您的帮助。我尝试了此解决方案,但输出为“动态节的长度为零。未找到动态节:错误0”。感谢您的回答。但我在构建它的系统中没有得到这样的文件。添加更多信息时,系统是Solaris x86。请尝试
ldd-v
,也许您会获得有关其来源的更多信息