CMake找不到NVIDA的opencl-sdk



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

我遇到了一些问题:

1-FinedOpenCl.cmake不起作用,因为英伟达工具包未设置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-在设置过程中是否有任何选项可以自动进行所需的设置。

使用此处的定义: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})

您可能还需要检查:如何在CMake文件中添加头文件路径

您可以使用其他-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 FilesNVIDIA GPU Computing ToolkitCUDAv10.0,但不是很方便,所以我还在C:上制作了名为"CUDA"的符号链接(mklink /D linkname "path"),所以/cygdrive/c/cuda/lib实际上指向C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.0lib

windows上的Unix环境模拟和在命令提示符下编译是非常棘手的,是的。。

  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变量的程序

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

最新更新