【问题标题】:How do you include OpenCL in a Qt Creator project?如何在 Qt Creator 项目中包含 OpenCL?
【发布时间】:2013-07-04 15:53:44
【问题描述】:

我认为这是一个简单的问题,但我无法弄清楚。在 Visual Studio 中,您可以通过项目属性对话框添加包含目录、库目录和依赖项 (OpenCL.lib)。

但在 Qt Creator 中,它允许您添加外部库,但它不能帮助您设置头文件,并且键入头文件的绝对路径不起作用。将头文件添加到.pro 文件似乎也不起作用。

所以我添加了外部库

然后我尝试在INCLUDEPATH中添加头文件的路径:

INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86    
               $$PWD/../../../../../../Program Files (x86)/AMD APP/include

这次它给出的错误是:

但我也收到了:

"Can't open File.obj" // this happens if I just add the External Library and then click build
"No such file or directory 'C:/Program Files (x86)/AMD APP/include/CL/cl.h'" // but that file does exist.

解决方案

对于任何需要它的人来说,最终工作的 .pro 文件是

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = clTest100
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

win32:CONFIG(release, debug|release): LIBS += -Lc:/opencl/lib/x86/ -lOpenCL
else:win32:CONFIG(debug, debug|release): LIBS += -Lc:/opencl/lib/x86/ -lOpenCL

INCLUDEPATH += c:/opencl/include
DEPENDPATH += c:/opencl/include

【问题讨论】:

    标签: qt qt-creator


    【解决方案1】:

    问题很简单:空格Spaces have spatial meaning 他们在专业文件中分隔值。 您必须用双引号将包含空格的路径和文件名括起来!

    另一个问题是缺少尾部反斜杠,这意味着您将继续像 Phlucious 所写的那样在下一行添加参数。

    题外话
    正确的方法是创建prf file,因为每个带有 openCL 的项目都将使用相同的设置。此外,每台机器都有这个库的不同位置,因此每台机器都必须有自己的 prf 文件版本。在其他情况下,您将遇到协作问题(与其他开发人员共享代码)。 如果你使用 prf 文件,那么你将通过在你的项目中添加它来包含它:CONFIG += <prf file name>

    所以你的 prf 文件的内容应该是这样的:

    INCLUDEPATH += "c:/Program Files (x86)/AMD APP/include"
    LIBS += -L"c:/Program Files (x86)/AMD APP/lib/x86" -lOpenCL
    


    括号可能有类似的问题。我从来没有在我的项目中走这条路,因为这也可能是一个问题。
    在下一次尝试中,尝试使用单斜杠转义括号(不要使用相对路径):
    INCLUDEPATH += "c:/Program Files \(x86\)/AMD APP/include"
    LIBS += -L"c:/Program Files \(x86\)/AMD APP/lib/x86" -lOpenCL
    

    如果这不起作用,请尝试使用三斜杠进行转义(我喜欢这种方法的一些糟糕的链接):

    INCLUDEPATH += "c:/Program Files \\\(x86\\\)/AMD APP/include"
    LIBS += -L"c:/Program Files \\\(x86\\\)/AMD APP/lib/x86" -lOpenCL
    

    也许更好的解决方案是将这些库安装到更方便的目录中,该目录不包含括号和空格。

    您也可以尝试添加到 pro 文件中,用于调试目的,例如:

    message(LIBS $$LIBS)
    message(INCLUDEPATH $$INCLUDEPATH)
    

    【讨论】:

    • 它仍然不适用于双引号。我阅读了您发布的有关具有特殊含义的空间的链接,但 QT Creator 本身编写的路径没有双引号,这样只会增加混乱。无论如何,无论有没有双引号,它都不起作用。这是我当前的 .pro 文件。pastebin.com/tj4qnpD6 它(仍然)给出的错误是无法打开包含文件:'CL/cl.h':没有这样的文件或目录
    • 就是这样。我将 opencl 文件移动到 c:\opencl 然后 INCLUDEPATH += $$PWD/../../../../../../opencl/include (指向 c:\opencl)和#include 我在做生意。感谢您的帮助!
    【解决方案2】:

    当您希望表达式在 PRO 文件中拆分为多行时,除最后一行之外的每一行的末尾都需要有一个反斜杠。

    例如,您的

    INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86    
                   $$PWD/../../../../../../Program Files (x86)/AMD APP/include
    

    应该是

    INCLUDEPATH += $$PWD/../../../../../../Program Files (x86)/AMD APP/lib/x86 \
                   $$PWD/../../../../../../Program Files (x86)/AMD APP/include
    

    【讨论】:

    • 它仍然显示错误:C1083:无法打开包含文件:'CL/c.h':没有这样的文件或目录
    • 对不起,应该是CL/cl.h。但是在再看一遍之后,我认为无论如何第一行都不应该在那里。尽管感谢您指出如何添加多个包含。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2020-01-03
    • 1970-01-01
    • 2019-05-29
    • 2013-01-18
    相关资源
    最近更新 更多