【问题标题】:CMake can not find opencl sdk by NVIDACMake 找不到 NVIDIA 的 opencl sdk
【发布时间】:2015-04-05 10:51:03
【问题描述】:

我刚刚安装了 NVIDIA CUDA 工具包,用于在 windows 8.1 上开发 OpenCL 应用程序。

我遇到了一些问题:

1- FinedOpenCl.cmake 不起作用,因为 Nvidia 工具包未设置 opencl_dir。

cmake 文件是:

FIND_PACKAGE(OpenCL REQUIRED)
INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIR})

而cmake错误是:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
  Could NOT find OpenCL (missing: OPENCL_LIBRARY OPENCL_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/Program Files (x86)/CMake/share/cmake-3.1/Modules/FindPackageHandleStandardArgs.cmake:374 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindOpenCL.cmake:35 (find_package_handle_standard_args)
  CMakeLists.txt:5 (FIND_PACKAGE)

2- 没有 c++ 接口的 cl.hpp。

3- 标头和库位于不同的目录中,因此很难在应用程序中使用它们。

我的问题:

1- 有什么办法可以解决吗?

2- 安装过程中是否有任何选项可以自动执行所需的设置。

【问题讨论】:

  • 您在哪个操作系统上开发?
  • @jprice 添加到问题中。我正在使用 Windows 8.1
  • 我想笼统地告诉你如何直接使用find_file 和find_library 来破解它真的没有帮助吗?
  • @DevSolar 这会有所帮助,但我想知道为什么它一般找不到它?

标签: c++ cmake opencl


【解决方案1】:

使用此处找到的定义: http://www.cmake.org/cmake/help/v3.1/module/FindOpenCL.html

试试下面的(我在 Windows 10 Pro 和 Ubuntu 14.04LTS 上做了一个快速测试):

FIND_PACKAGE(OpenCL REQUIRED)

INCLUDE_DIRECTORIES(${OpenCL_INCLUDE_DIRS}) 

LINK_DIRECTORIES(${OpenCL_LIBRARY})

您可能还想检查: How to add header file path in CMake file

【讨论】:

    【解决方案2】:

    您可以使用额外的-D 选项运行cmake,例如:

    cmake [some_your_options] -DOpenCL_LIBRARY=/cygdrive/c/cuda/lib -DOpenCL_INCLUDE_DIR=/cygdrive/c/cuda/include [some_your_other_options] .....

    所以它会看到OpenCL这样手动指定的路径。

    为我的CygWin64提供的上例,在C:\cygdrive文件夹中,我之前为所有需要的逻辑驱动器添加了mklink的几个符号链接,所以"c"链接到"C:\", "d" 链接到"D:\" 等等。

    我的NVidia CUDA安装路径确实是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\,但是不是很方便,所以我还在C:上做了符号链接(mklink /D linkname "path")命名为“cuda”,所以/cygdrive/c/cuda/lib真的指向@987654334 @。

    windows 上的 Unix 环境仿真和在命令提示符中编译非常棘手,是的..

    【讨论】:

      【解决方案3】:
      1. 没有标准的 FindOpenCl.cmake,所以我不知道您使用的是什么文件,但在我的代码中,我搜索了一堆不同的文件夹,包括这些:
      $ENV{OPENCL_DIR}
      $ENV{NVSDKCOMPUTE_ROOT}     # NVIDIA on Windows
      $ENV{CUDA_PATH_V6_5}
      $ENV{CUDA_PATH}
      

      此外,我看到了一些麻烦,具体取决于路径是否有最终的“\” - 这似乎是 CMake 中的某种错误,它无法自动处理这两种情况。因此,请尝试在您的环境变量中添加反斜杠。

      1. 这是事实 - NVIDIA 根本不包含 cl.hpp,但您可以从 Khronos 下载它:https://www.khronos.org/registry/cl/api/1.1/cl.hpp。
      2. 这也应该由 FindOpenCl.cmake 处理 - 如果没有,您必须自己编写,或者找到一个可以正确设置 include 和 lib 变量的工具。

      最后,在安装过程中没有任何秘密选项可以修复这些问题:)

      【讨论】:

      猜你喜欢
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2012-07-22
      • 2015-12-07
      • 2016-02-26
      • 2019-06-15
      相关资源
      最近更新 更多