我正试图在Windows 7 64位操作系统上,使用Intel OpenCL应用程序SDK 2013和Qt Creator编译以下C++代码:
#include <utility>
#define __NO_STD_VECTOR // Use cl::vector instead of STL version
#include <CL/cl.hpp>
int main()
{
return 0;
}
这是我的.pro文件:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/C:/Program1/Intel/OpenCL_SDK/3.0/lib/x64/ -lOpenCL
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/C:/Program1/Intel/OpenCL_SDK/3.0/lib/x64/ -lOpenCLd
else:unix: LIBS += -L$$PWD/C:/Program1/Intel/OpenCL_SDK/3.0/lib/x64/ -lOpenCL
INCLUDEPATH += C:/Program1/Intel/OpenCL_SDK/3.0/include
DEPENDPATH += $$PWD/C:/Program1/Intel/OpenCL_SDK/3.0/include
我不得不移除
$$PWD/
(Qt Creator由于某种未知的原因添加到每个路径的开头)在INCLUDEPATH
中,否则编译器将无法找到CL/cl.cpp
。无论如何,在尝试编译时,我遇到以下错误消息:
In file included from ..\opencl_test\main.cpp:3:0:
C:\Program1\Intel\OpenCL_SDK\3.0\include/CL/cl.hpp:680:1: error: expected unqualified-id before '{' token
{
^
紧接着是许多其他错误消息。我为什么会收到这些错误消息,如何解决?
更新1
正如prajmus在评论中指出的那样,$$PWD
是.pro文件的目录,因此缺少一个空格,而Qt Creator忽略了它。在LIBS
规范中,还需要在C:
之前添加-L
。
我已经修复了这个问题,但我仍然收到相同的错误消息。
更新2
如果我注释掉#define __NO_STD_VECTOR
这一行,错误消息就会消失,但是我会得到以下信息:
c:/program1/qt/tools/mingw48_32/bin/../lib/gcc/i686-w64-mingw32/4.8.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lOpenCLd
将
-lOpenCLd
更改为-lOpenCL
会消除该警告,但会使我遇到以下问题:00:38:14: Running steps for project opencl_test...
00:38:14: Configuration unchanged, skipping qmake step.
00:38:14: Starting: "C:\Program1\Qt\Tools\mingw48_32\bin\mingw32-make.exe"
C:\Program1\Qt\5.2.0\mingw48_32\bin\qmake.exe -spec win32-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug -o Makefile ..\opencl_test\opencl_test.pro
C:/Program1/Qt/Tools/mingw48_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'E:/Work/Programs/Test_programs/opencl_test/build-opencl_test-Desktop_Qt_5_2_0_MinGW_32bit-Debug'
g++ -Wl,-subsystem,console -mthreads -o debug\opencl_test.exe debug/main.o -LE:/Work/Programs/Test_programs/opencl_test/opencl_test/ -LC:/Program1/Intel/OpenCL_SDK/3.0/lib/x64/ -lOpenCL
debug/main.o: In function `getPlatformVersion':
C:/Program1/Intel/OpenCL_SDK/3.0/include/CL/cl.hpp:1689: undefined reference to `clGetPlatformInfo@20'
现在,为什么会显示“clGetPlatformInfo@20未定义”? 在[这个问题][1]中,答案似乎是-lOpenCL
在源文件之前。但在我的情况下,-lOpenCL
是构建行的最后一个参数。另一方面,我看不到main.cpp被构建在任何地方,那么这个文件会发生什么呢?
OpenCLd
是带有调试符号的库(因此末尾有 d),$$PWD
是您的 .pro 文件目录(因此大多数情况下是您的项目目录)。您在$$PWD/
后面缺少一个空格,也许之前由于这个原因它没有起作用。 - prajmus$$PWD/
重新添加到.pro文件中,并在每个位置后面添加了一个空格,现在它可以找到cl.hpp了。然而,我仍然收到相同的错误消息。 - HelloGoodbye