gpt4 book ai didi

opencl - 如何使用 Qt Creator 编译一个简单的 OpenCL 应用程序?

转载 作者:行者123 更新时间:2023-12-04 20:01:30 26 4
gpt4 key购买 nike

我正在尝试使用 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;
}

这是我的 .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规范, -L也必须在 C: 之前添加.

我解决了这个问题,但我仍然收到相同的错误消息。

更新 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' is undefined?** In [this question][1], the answer seems to be that -lOpenCL comes before the source file. But in my case, -lOpenCL` 是构建行的最后一个参数。另一方面,我看不到 main.cpp 是在任何地方构建的,那么该文件会发生什么?

最佳答案

感谢@Matthias,我设法解决了最后的难题。所以,总而言之:

  • 32 位 (x86) 版本的 MinGW 无法将您的应用程序链接到 64 位 (x64) 版本的 OpenCL 库。尝试这样做会导致 undefined reference 错误。
  • 我不得不评论 #define __NO_STD_VECTOR否则我会得到一个编译错误。
  • 使用 Qt Creator 中内置的“添加库”功能添加库时,它会将 $$PWD在路径之前,并且在它们之间没有空间。这应该是一个单独的文件夹,所以 $$PWD 之间必须有一个空格。以及您指定的路径。对于LIBS规范,还必须有一个额外的-L空间之后。
  • 确保没有 d如果您没有此类库文件,请在库名称的 ent 中添加。添加我错过取消选中的内部或外部库时,有一个选项“为调试版本添加“d”后缀”。

  • 最终编译的代码:

    主.cpp:
    #include <utility>
    //#define __NO_STD_VECTOR // Use cl::vector instead of STL version
    #include <CL/cl.hpp>

    int main()
    {
    return 0;
    }

    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

    关于opencl - 如何使用 Qt Creator 编译一个简单的 OpenCL 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223323/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com