【发布时间】:2021-08-01 16:09:24
【问题描述】:
我正在使用 CMake 3.16,CMakeLists.txt 文件指定了最低 CMake 版本 3.9。在我的文件中,我有:
find_package(CUDA 8.0 REQUIRED)
find_package(OpenCL REQUIRED)
# etc. etc.
target_link_libraries(my_executable
PRIVATE
cuda # The NVIDIA CUDA driver API
${CUDA_LIBRARIES}
OpenCL::OpenCL
)
现在,在 CMake 生成阶段,我收到错误:
CMake Warning at CMakeLists.txt:44 (add_executable):
Cannot generate a safe runtime search path for target my_executable because
files in some directories may conflict with libraries in implicit
directories:
runtime library [libOpenCL.so.1] in /usr/lib64 may be hidden by files in:
/usr/local/cuda/lib64
Some of these libraries may not be found correctly.
现在,我确实想要 CUDA 目录中的 libOpenCL.so.1;并且构建确实会生成具有正确依赖关系的可执行文件。我如何告诉 CMake 这个掩码没问题,而不是让它打印警告消息?
注意:在 CMake 中使用 CUDA 已经改变了 3.x 系列版本的很多。因此,在 3.8 之前发生的任何事情都无关紧要,并且在 3.17 中发生了显着变化,之后发生了一些不平凡的变化。关于 3.8 之前和 3.17 或更高版本的答案很好,但不是我需要的。
【问题讨论】:
-
你能发布 CMake 配置步骤的完整输出吗?在我看来,您安装了两个不兼容的 OpenCL 副本,它正在寻找系统范围的副本,而不是 cuda 供应的副本。
-
@AlexReinking:我可能会在周四完成。现在我要说的是,将某种面向 CPU 的 OpenCL 版本安装为 OS 分发包的一部分,然后安装一个带有自己的 OpenCL 的独立安装的 CUDA 版本是很常见的。 IIRC,不同的 OpenCL 平台应该以某种方式相互配合,以便您可以在其中进行选择,而不管您链接的是哪个平台,但我不确定它如何/是否有效。
-
您可以尝试将
OpenCL_ROOT设置为/usr/local/cuda -
@AlexReinking:我个人可以这样做,但不能指望建立我的图书馆的人这样做。即使没有该设置,我也需要
CMakeLists.txt在没有这些警告的情况下工作。
标签: c++ cmake cuda linker opencl