Hel*_*bye 5 intel opencl permission-denied qt-creator windows-7-x64
我正在尝试使用Qt Creator,在Windows 7 64位和英特尔SDK for OpenCL Applications 2013上编译以下C++代码:
#include <utility>
#define __NO_STD_VECTOR // Use cl::vector instead of STL version
#include <CL/cl.hpp>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的.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
Run Code Online (Sandbox Code Playgroud)
我不得不删除$$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
{
^
Run Code Online (Sandbox Code Playgroud)
接下来是很多其他错误消息.为什么我会收到这些错误,如何解决?
正如prajmus在评论中指出的那样,$$PWD是.pro文件的目录,因此在它之后缺少一个空格,Qt Creator错过了它.在LIBS规范中,-L也必须在之前添加C:.
我修复了,但我仍然得到相同的错误消息.
如果我注释掉该行#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
Run Code Online (Sandbox Code Playgroud)
改变-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'
Run Code Online (Sandbox Code Playgroud)
**现在,为什么说``clGetPlatformInfo @ is undefined?** In [this question][1], the answer seems to be that20'- comes before the source file. But in my case,ltOpenCL -lOpenCL`是构建线的最后一个参数.另一方面,我看不到main.cpp是在任何地方构建的,那么该文件会发生什么?
感谢@Matthias,我成功地解决了最后一块难题。所以,总而言之:
#define __NO_STD_VECTOR否则会出现编译错误。$$PWD路径之前,并且路径之间不留空格。$$PWD这应该是一个单独的文件夹,因此您指定的路径之间必须有一个空格。对于规范,空格后LIBS还必须有一个额外的空格。-Ld如果您没有此类库文件,请确保库名称的后面没有添加。添加我错过取消选中的内部或外部库时,有一个选项“为调试版本添加“d”后缀”。最终编译出来的代码:
主要.cpp:
#include <utility>
//#define __NO_STD_VECTOR // Use cl::vector instead of STL version
#include <CL/cl.hpp>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Qt项目文件:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/ -LC:/Program1/Intel/OpenCL_SDK/3.0/lib/x86/ -lOpenCL
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/ -LC:/Program1/Intel/OpenCL_SDK/3.0/lib/x86/ -lOpenCL
else:unix: LIBS += -L$$PWD/ -LC:/Program1/Intel/OpenCL_SDK/3.0/lib/x86/ -lOpenCL
INCLUDEPATH += $$PWD/ C:/Program1/Intel/OpenCL_SDK/3.0/include
DEPENDPATH += $$PWD/ C:/Program1/Intel/OpenCL_SDK/3.0/include
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4305 次 |
| 最近记录: |