gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:31:24 25 4
gpt4 key购买 nike

我正在构建一个第三方程序,该程序使用来自 /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将所有库复制到生成可执行文件的同一目录中 [e.q. ../GetHistPrices/bin ];因此第一条路径是可以的。

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

当我尝试运行程序时 不是 ../GetHistPrices/bin/目录 [它所在的位置] - 例如我不使用 ./GetHistPrices 执行它- 所以我收到此错误消息:

bin/GetHistPrices: error while loading shared libraries:

  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让我们也成功启动程序。

操作系统是 SLES 12.3 - 老实说,不知何故,它在我看来就像系统中的一个错误。

我的问题:

我做错了什么,它甚至不起作用 RUNPATH在可执行文件中正确设置。

最佳答案

可能回答晚了,但可能对其他人有用。
一些注意事项:

  • 考虑 rpath 对比 运行路径 : 你可以用
  • 改变

    -Wl,--disable-new-dtags


  • 如果您的库使用其他库作为依赖项,则必须单独设置它的 rpath/runpath(在它的 make 过程中)。这是 LD_LIBRARY_PATH 和 rpath/runpath 之间的区别之一。
  • 您可以使用 LD_DEBUG=libs ldd your_app/libyour_lib.so 来检查 rpath/runpath 的搜索路径。
  • 关于ld - 即使 -rpath 设置正确,也找不到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53461465/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com