2013-03-28 88 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)