我想要做的是配置我的 CMakeLists 文件,以便在构建我的项目时,链接器使用驻留在我的构建树中的共享库 (.so) 的副本来链接可执行文件,但不会在中设置 rpath链接的可执行文件,以便系统必须在加载程序请求时提供该库。
具体来说,我想在构建期间在未将 libOpenCL.so 安装为系统库的构建场上链接到 libOpenCL.so。为此,libOpenCL.so 位于项目构建树中,并使用 CMakeLists 文件中的绝对路径进行引用。这个绝对路径是为了确保如果系统恰好安装了 libOpenCL.so 则不会使用它。
但是,在运行最终的可执行文件时,CMake 添加了 rpath 的绝对路径,这会阻止库加载器拾取并使用 libOpenCL.so 的系统版本。
看起来很简单,但我不太明白。
Thanks!
我知道这个答案太晚了。我遇到了和你一样的要求。
我们需要的是我们设置的白名单方法CMAKE_BUILD_RPATH
明确我们需要什么。或者我们需要一种黑名单方法来告诉 cmake,RPATH
我们不希望在可执行文件中出现。去除方法RPath
来自构建树尚未记录:https://gitlab.kitware.com/cmake/cmake/issues/16825 https://gitlab.kitware.com/cmake/cmake/issues/16825
我采取的解决方案是:
Set RUNPATH
代替RPATH
。您可以通过以下语句实现此目的:
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags")
When RUNPATH
存在,RPATH
被忽略。RUNPATH
- 与...一样RPATH
,但搜索后LD_LIBRARY_PATH
,仅在最新的 UNIX 上受支持
然后我可以使用环境变量实现覆盖库LD_LIBRARY_PATH
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)