如何解决CMake+OpenCL+CUDA -> 运行时库可能被隐藏
我使用的是 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 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 3.17+ 开始,CUDA OpenCL 库由 hideSystemUI();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
getWindow().getAttributes().layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; }
模块加载。它是这样使用的:
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
我希望这个答案能帮助其他正在使用最新 CMake 的读者,因为任何适用于 3.9 的答案都不会那么好。
,正如@AlexReinking 在评论中所建议的,您可以通过向 CMake 提供有关您要使用的 OpenCL 位置的(强)提示来避免此警告。在运行 CMake 之前,将 OpenCL_ROOT
环境变量设置为 /usr/local/cuda
;对于高于 3.12 的 CMake 版本,find_package()
命令将使用该变量,如果可能,更倾向于将 OpenCL 定位在那里 - 并且不会警告您有关替代位置的信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。