我正在尝试构建这个小的OpenCL项目:
https://bitbucket.org/Anteru/opencltutorial/src
在Windows上,在Cygwin中为。这是一个玩具项目,具有一个.cpp文件和一个内核,以演示OpenCL的用法。因此,我下载了软件包并cmake
。我收到错误消息:
CMake Error at /usr/share/cmake-3.14.5/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find OpenCL (missing: OPENCL_libraRY)
Call Stack (most recent call first):
/usr/share/cmake-3.14.5/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake/FindOpenCL.cmake:35 (find_package_handle_standard_args)
CMakeLists.txt:6 (FIND_PACKAGE)
我不会对此感到厌恶,而是继续更改我的CMakeCache.txt
,以便代替:
OPENCL_libraRY:FILEPATH=OPENCL_libraRY-NOTFOUND
我做到了:
OPENCL_libraRY:FILEPATH=/cygdrive/c/Program Files/NVIDIA Corporation/OpenCL/OpenCL.dll
(这是NVIDIA OpenCL DLL的合法路径)好,所以现在CMake配置成功结束。 main.cpp
文件已编译,但是链接失败!:
/usr/bin/c++.exe -Wl,--enable-auto-import CMakeFiles/clTut.dir/main.cpp.o -o clTut.exe -Wl,--out-implib,libclTut.dll.a -Wl,--major-image-version,--minor-image-version,0 "/cygdrive/c/Program Files/NVIDIA Corporation/OpenCL/OpenCL.dll"
CMakeFiles/clTut.dir/main.cpp.o:main.cpp:(.text+0x610): undefined reference to `clGetPlatformInfo'
CMakeFiles/clTut.dir/main.cpp.o:main.cpp:(.text+0x610): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `clGetPlatformInfo'
CMakeFiles/clTut.dir/main.cpp.o:main.cpp:(.text+0x659): undefined reference to `clGetPlatformInfo'
CMakeFiles/clTut.dir/main.cpp.o:main.cpp:(.text+0x659): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `clGetPlatformInfo'
等等,许多这样的错误。
为什么会出现这些错误,如何解决?是因为我使用Cygwin是ELF / WinPE不兼容的结果吗?
其他信息:
- 我的机器同时集成了Intel Graphics(630-咖啡湖)和Quadro P1000。
- 我已将CUDA 10.2和AMD CodeXL安装(默认情况下)到其默认位置。
- 寻找一个OpenCL DLL文件,我发现:
$ locate OpenCL.dll /cygdrive/c/Program Files (x86)/CodeXL/spies/OpenCL.dll /cygdrive/c/Program Files (x86)/CodeXL/spies64/OpenCL.dll /cygdrive/c/Program Files/NVIDIA Corporation/OpenCL/OpenCL.dll /cygdrive/c/Windows/LastGood/system32/OpenCL.dll /cygdrive/c/Windows/LastGood/SysWow64/OpenCL.dll /cygdrive/c/Windows/System32/OpenCL.dll /cygdrive/c/Windows/SysWOW64/OpenCL.dll