linux–CMake:不要为链接中使用的单个库设置rpath

linux–CMake:不要为链接中使用的单个库设置rpath,第1张

概述我想要做的是配置我的CMakeLists文件,以便在构建我的项目时,链接器使用驻留在我的构建树中的共享库(.so)的副本来链接可执行文件,但是不设置rpath链接的可执行文件,以便系统必须在加载程序请求时提供库.具体来说,我想在没有安装libOpenCL.so作为系统库的构建服务器场的构建期间链接libOpenCL.so.为此,libOpenCL.so位于项

我想要做的是配置我的CMakeLists文件,以便在构建我的项目时,链接器使用驻留在我的构建树中的共享库(.so)的副本来链接可执行文件,但是不设置rpath链接的可执行文件,以便系统必须在加载程序请求时提供库.

具体来说,我想在没有安装libOpenCL.so作为系统库的构建服务器场的构建期间链接libOpenCL.so.为此,libOpenCL.so位于项目构建树中,并使用CMakeLists文件中的绝对路径进行引用.这个绝对路径是为了确保如果系统确实安装了libOpenCL.so,那么就不会使用它.

但是,当运行最终的可执行文件时,CMake已经添加了rpath的绝对路径,该路径停止了libOpenCL的系统版本.由库加载器拾取并使用.

看似简单但我无法弄明白.

谢谢!

最佳答案我知道这个答案已经很晚了.我遇到了和你一样的要求.
我们需要的是白名单方法,我们将CMAKE_BUILD_RPATH明确地设置为我们需要的方法.或者我们需要一个黑名单方法,我们告诉cmake,我们在可执行文件中不需要哪些RPATH.尚未记录从构建树中删除RPath的方法:https://gitlab.kitware.com/cmake/cmake/issues/16825

我采取的解决方案是:

设置RUNPATH而不是RPATH.您可以通过以下声明实现此目的:

@H_419_24@SET(CMAKE_EXE_linkER_FLAGS "-Wl,--enable-new-dTags")

当存在RUNPATH时,将忽略RPATH.
RUNPATH – 与RPATH相同,但在LD_liBRARY_PATH之后搜索,仅在最近的UNIX上受支持

然后我可以使用环境变量LD_liBRARY_PATH来覆盖库.

总结

以上是内存溢出为你收集整理的linux – CMake:不要为链接中使用的单个库设置rpath全部内容,希望文章能够帮你解决linux – CMake:不要为链接中使用的单个库设置rpath所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1050123.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存