微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CMake+OpenCL+CUDA -> 运行时库可能被隐藏

如何解决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 生成阶段,出现错误


 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 举报,一经查实,本站将立刻删除。