无法找到OpenCL(缺失:OpenCL_LIBRARY)

10

我正在尝试在Windows 10上使用nvidia gpu,结合CMake和CLion(具体来说是boost compute)来使用OpenCL。感觉我已经尝试了所有的方法,但我对CMake毫无头绪,也找不到足够基础的网络文章让我理解。即使是官方文档对于初学者来说也不是很有帮助。我还需要最终在OS X和某些Linux系统上运行这个程序。

以下是我的混乱代码(CmakeLists.txt):

cmake_minimum_required(VERSION 3.3)
project(cpl)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2")

set(SOURCE_FILES
        src/planner/main.cpp)

set(BOOST_ROOT C:/boost)
set(BOOSTROOT C:/boost)

include_directories(lib/compute/include)

include_directories($ENV{CUDA_PATH})

# boost
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.60.0 REQUIRED)

# opencl
set(CMAKE_MODULE_PATH lib/cmake)

find_package(OpenCL REQUIRED)

INCLUDE_DIRECTORIES(${OpenCL_INCLUDE_DIRS})

LINK_DIRECTORIES(${OpenCL_LIBRARY})

message(STATUS "OpenCL found: ${OPENCL_FOUND}")
message(STATUS "OpenCL includes: ${OPENCL_INCLUDE_DIRS}")
message(STATUS "OpenCL CXX includes: ${OPENCL_HAS_CPP_BINDINGS}")
message(STATUS "OpenCL libraries: ${OPENCL_LIBRARIES}")

#target_link_libraries(cpl OpenCL)

这是我遇到的错误:

C:\Users\drathier\.CLion2016.1\system\cygwin_cmake\bin\cmake.exe --build C:\Users\drathier\.CLion2016.1\system\cmake\generated\cpl-bfc654e8\bfc654e8\Debug --target all -- -j 8
-- Boost version: 1.60.0
CMake Error at /cygdrive/c/Users/drathier/.CLion2016.1/system/cygwin_cmake/share/cmake-3.5.1/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find OpenCL (missing: OpenCL_LIBRARY)
Call Stack (most recent call first):
  /cygdrive/c/Users/drathier/.CLion2016.1/system/cygwin_cmake/share/cmake-3.5.1/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /cygdrive/c/Users/drathier/.CLion2016.1/system/cygwin_cmake/share/cmake-3.5.1/Modules/FindOpenCL.cmake:128 (find_package_handle_standard_args)
  CMakeLists.txt:22 (find_package)

CMake输出日志: http://pastebin.com/EgGyRk9H


2
请检查CMakeError.log文件,查找OpenCL_LIBRARY未找到的原因。 - usr1234567
CMakeError.log在哪里?我只看到了CMakeOutput.log。@usr1234567 - Filip Haglund
你安装了OpenCL库在哪里?库文件的路径是什么(命名为OpenCL,可能有前缀和扩展名)?头文件cl.h的路径是什么? - Tsyvarev
1个回答

3
在使用find_package查找OpenCL安装失败时,可以通过以下参数覆盖CMake中使用的FindOpenCL CMake模块。
-DOpenCL_FOUND=True -DOpenCL_LIBRARY=<PUT_LIBRARY_PATH_HERE>

包含路径也可以通过 OpenCL_INCLUDE_DIR 手动设置,详见文档


“FindOpenCL”模块(请参见source,您的版本可能与此不同)检查一些内容以识别某些OpenCL SDK,例如由OpenCL安装导出的典型环境变量:
    ENV "PROGRAMFILES(X86)"
    ENV AMDAPPSDKROOT
    ENV INTELOCLSDKROOT
    ENV CUDA_PATH
    ENV NVSDKCOMPUTE_ROOT
    ENV ATISTREAMSDKROOT
    ENV OCL_ROOT

你可以检查这些路径中是否至少有一个使用正确的路径进行了导出,如果没有,请自己设置它,以避免上述手动覆盖。你的 CMakeLists.txt 指示应该设置 CUDA_PATH,因此可能首先要检查该值。进一步调试的路径可能是向 FindOpenCL 模块添加一些输出。
希望能帮到你,祝好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接