2013-03-28 87 views
2

使用Qt5编译库QtOpenCL的任何人(可能在Window下)?使用Qt5编译QtOpenCL

编辑:我设法将它移植到QT5编译代码。我在这里留下了我想用我的方法替换的脏部分,并描述了我在答案中做了什么。

我无法提供到我的OpenCL安装包括路径,所以我

手动修改的src /的OpenCL/opencl.pro通过将线

INCLUDEPATH += " *[absolute path to the openCL include folder]* " 
QMAKE_LIBDIR_OPENCL = "*[absolute path to the opencl lib folder]*" 

手动修改的src/openclgl/openclgl .pro通过添加该行

INCPATH += " *[absolute path to the openCL include folder]* " 
QMAKE_LIBDIR_OPENCL = "*[absolute path to the opencl lib folder]*" 

任何人都知道如何解决这个更清洁的方式?

回答

6

这里是改变我已经向大家介绍:

  1. 为了增加OpenCL的库修改的.pro文件。这对我来说仍然是一个开放的问题。如何以更清洁的方式解决这个问题?

  2. 链接的项目(二者opencl.pro和openclgl.pro),以所需的额外的Qt模块QtConcurrent:

    QT + =并发

  3. 通过去除包修复的#include风格,例如#include <qtconcurrentrun.h>代替通过与分别的std ::的malloc,性病::免费,性病:: memcpy的替换qMalloc,qfree,qMemCopy旧#include <QtCore/qtconcurrentrun.h>

  4. 修复qclvector.cpp

    此外修改ref的初始化在从ref = 1到ref.store(1)的构造函数中;

  5. 删除所有宏QT_LICENSED_MODULE

这足以至少QtOpenCL和QtOpenCLGL使用QT5

+0

我只想补充一点,我还必须修改'static void qt_cl_context_notify(...'在'qclcontext.cpp'中'static void CL_CALLBACK qt_cl_context_notify(...'和'static void qt_clgl_context_notify(...'to'static void CL_CALLBACK qt_clgl_context_notify(.. .'在'qclc ontextgl.cpp' – jcxz 2014-04-09 08:43:36

0

感谢分享你的经验进行编译。

做过的一切,QtOpenCL编译但得到了很多链接警告和错误的,例如:

qclprogram.obj:警告LNK4217:本地定义的符号setLastError @ QCLContext @@ QEAAXH @ Z(公:void __cdecl QCLContext :: setLastError(int))in function“public:bool __cdecl QCLProgram :: build(class QList const &,class QString const &)”(?build @ QCLProgram @@ QEAA_NAEBV?$ QList @ VQCLDevice @@ @@ AEBVQString @@@ Z)

1> qcluserevent.obj:warning LNK4217:locall在函数“private:void __cdecl QCLUserEvent :: validateEvent(void)”(?)中导入时,定义了符号?commandType @ QCLEvent @@ QEBAIXZ(public:unsigned int __cdecl QCLEvent :: commandType(void)const)validateEvent @ QCLUserEvent @@ AEAAXXZ)

1> qclvector.obj:警告LNK4217:本地定义的符号CONTEXTID @ QCLContext @@ QEBAPEAU_cl_context @@ XZ?(市民:结构_cl_context * __cdecl QCLContext :: CONTEXTID(无效)常量)进口在功能 “的保护:无效__cdecl QCLVectorBase ::创建(类QCLContext *,整型,枚举QCLMemoryObject ::访问)”

1> qclworksize(创建@ QCLVectorBase @@ IEAAXPEAVQCLContext @@ HW4Access @ QCLMemoryObject @@@ Z?) .obj:警告LNK4217:在函数中导入的本地定义的符号?maximumWorkItemSize @ QCLDevice @@ QEBA?AVQCLWorkSize @@ XZ(public:class QCLWorkSize __cdecl QCLDevice :: maximumWorkItemSize(void)const)public:class QCLWorkSize __cdecl QCLWorkSize :: toLocalWorkSize class QCLDevice const &)const“ (?toLocalWorkSize @ @@ QCLWorkSize AV1 QEBA @ AEBVQCLDevice @@@ Z)

1> qclkernel.obj:错误LNK2001:解析外部符号“__declspec(dllimport的)公共:_ CDECL QCLEvent :: QCLEvent(无效) “( _imp _ ?? 0QCLEvent @@ @ QEAA XZ)

1> qclmemoryobject.obj:错误LNK2019:解析外部符号 ”__declspec(dllimport的)公共:_ CDECL QCLEvent :: QCLEvent(无效)“( _imp_ (0QCLEvent @@ QEAA @ XZ)在函数“void __cdecl`动态初始化程序中引用了'public:static class std :: _ System_error_category std :: _ Error_objects :: _ System_object''(void)”(?? __ E?_System_object @?$ _Error_objects @ H @ std @@ 2V_System_error_category @ 2 @ A @@ YAXXZ)

1> qclbuffer.obj:错误LNK2001:解析外部符号 “__declspec(dllimport的)公共:_ CDECL QCLEvent :: QCLEvent(无效)”( _imp _ ?? 0QCLEvent @@ @ QEAA XZ)

1> qclcontext.obj:错误LNK2001:无法解析的外部符号 “__declspec(dllimport的)市民:_ CDECL QCLEvent :: QCLEvent(无效)”( _imp _ ?? 0QCLEvent @@ QEAA @ XZ)