即使-rpath设置正确,也找不到共享库

时间:2018-11-24 19:03:43

标签: ld rpath

我正在构建一个第三方程序,该程序正在使用/etc/ld.so.conf中未设置的目录中的库-因此,我将程序与-rpath选项链接起来。

运行objdump -x bin/GetHistPrices | grep -i path来检查-rpath的设置是否正确,我得到确认是可以的:

RUNPATH 
   /application/FXCM-API/GetHistPrices/bin:
   /application/FXCM-API/lib:
   /application/FXCM-API/sample_tools/lib

cmake将所有库复制到生成可执行文件的同一目录中。 ../GetHistPrices/bin];因此第一条路径是可以的。

甚至,最后2个路径也指向共享库所在的目录-这些-rpath选项是由cmake脚本自动添加的。

当我尝试运行../GetHistPrices/bin/目录[所在位置]中的程序时-e.q.我没有用./GetHistPrices执行它-所以我收到此错误消息:

  

bin / GetHistPrices:加载共享库时出错:

  libgsexpat.so: cannot open shared object file: No such file or directory

该程序仅在我从bin//application/FXCM-API/lib目录运行时才启动,因为所需的库位于那里。

1)
当我使用
运行程序时 LD_LIBRARY_PATH="/application/FXCM-API/GetHistPrices/bin" bin/GetHistPrices
然后开始。但这也是我在可执行文件中看到的。奇怪!

2)
/application/FXCM-API/GetHistPrices/bin添加到/etc/ld.so.conf让我们同样成功地启动程序。

OS是SLES 12.3-老实说,在某种程度上,它看起来像系统中的错误。

我的问题:

即使在可执行文件中正确设置了RUNPATH也无法正常工作,我该怎么做。

1 个答案:

答案 0 :(得分:0)

可能迟到了,但可能对其他人有用。 一些注意事项:

  1. 考虑 rpath runpath :您可以使用
  2. 进行更改

-Wl,-disable-new-dtags

  1. 如果您的库使用其他库作为依赖项,则必须分别设置它的rpath / runpath(在它的生成过程中)。这是LD_LIBRARY_PATH和rpath / runpath之间的差异之一。
  2. 您可以使用LD_DEBUG = libs your_app / libyour_lib.so来检查rpath / runpath的搜索路径。