2013-03-28 4 views
2

Quelqu'un a réussi à compiler la bibliothèque QtOpenCL en utilisant Qt5 (éventuellement sous Window)?Compilation QtOpenCL avec QT5

éditer: J'ai réussi à compiler le code en le portant sur QT5. Je laisse ici dans la question les parties sales que je voudrais remplacer dans ma méthode et décrivez ce que j'ai fait dans la réponse.

je n'étais pas en mesure de fournir le chemin d'inclusion à mon installation OpenCL donc je

modifié manuellement src/OpenCL/opencl.pro en ajoutant la ligne

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

modifié manuellement src/openclgl/openclgl .pro en ajoutant la ligne

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

Quelqu'un sait comment résoudre ce problème d'une manière plus propre?

Répondre

6

Voici les changements que je devais présenter:

  1. Modifier les fichiers .pro afin d'ajouter la bibliothèque OpenCL. C'est toujours un problème ouvert pour moi. Comment résoudre cela d'une manière plus propre?

  2. Lien des projets (à la fois opencl.pro et openclgl.pro) au QtConcurrent module Qt supplémentaire requis:

    QT + = simultané

  3. Fixer le style #include en supprimant les paquets, par exemple #include <qtconcurrentrun.h> à la place de l'ancien #include <QtCore/qtconcurrentrun.h>

  4. Fix qclvector.cpp en remplaçant qMalloc, qfree, qMemCopy avec, respectivement, std :: malloc, std :: libre, std :: memcpy

    modifier en outre l'initialisation de la référence dans le constructeur de ref = 1 à ref.store (1);

  5. Suppression de toutes les macros QT_LICENSED_MODULE

Cela suffit pour compiler au moins QtOpenCL et QtOpenCLGL utilisant QT5

+0

Je voudrais juste ajouter que J'ai aussi dû modifier 'static void qt_cl_context_notify (...' dans 'qclcontext.cpp' à' static void CL_CALLBACK qt_cl_context_notify (... 'et' static void qt_clgl_context_notify (... 'à' static void CL_CALLBACK qt_clgl_context_notify (.. .' dans 'qclc ontextgl.cpp' – jcxz

0

Merci de partager votre expérience.

a fait tout cela, QtOpenCL compilable mais a beaucoup d'avertissements de liaison et erreurs, par exemple:

qclprogram.obj: LNK4217 avertissement: symbole défini localement SetLastError @ QCLContext @@ QEAAXH @ Z (public : void __cdecl QCLContext :: setLastError (int)) importé dans la fonction "public: bool __cdecl QCLProgram :: build (classe QList const &, classe QString const &)" (? build @ QCLProgram @@ QEAA_NAEBV? $ QList @ VQCLDevice @@ @@ AEBVQString @@@ Z)

1> qcluserevent.obj: avertissement LNK4217: locall symbole défini? commandType @ QCLEvent @@ QEBAIXZ (public: unsigned int __cdecl QCLEvent :: commandType (void) const) importé dans la fonction "private: void __cdecl QCLUserEvent :: validateEvent (void)" (?ValidateEvent @ QCLUserEvent @@ AEAAXXZ)

1> qclvector.obj: LNK4217 avertissement: symbole défini localement ContextId @ QCLContext @@ QEBAPEAU_cl_context @@ XZ? (public: struct _cl_context * __cdecl QCLContext :: ContextId (void) const) importaient en fonction "protégée: void __cdecl QCLVectorBase :: create (classe QCLContext *, int, ENUM QCLMemoryObject :: Accès)"

1> qclworksize (créer @ QCLVectorBase @@ IEAAXPEAVQCLContext @@ HW4Access @ QCLMemoryObject @@@ Z?) .obj: warning LNK4217: symbole défini localement? maximumWorkItemSize @ QCLDevice @@ QEBA? AVQCLWorkSize @@ XZ (public: classe QCLWorkSize __cdecl QCLDevice :: maximumWorkItemSize (void) const) importé dans la fonction "public: class QCLWorkSize __cdecl QCLWorkSize :: toLocalWorkSize (classe QCLDevice const &) const " (? ToLocalWorkSize @ QCLWorkSize @@ QEBA AV1 @ AEBVQCLDevice @@@ Z)

1> qclkernel.obj: erreur LNK2001: symbole externe non résolu « __declspec (dllimport) public: _ cdecl QCLEvent :: QCLEvent (void) "( _imp _ ?? 0QCLEvent @@ QEAA @ XZ)

1> qclmemoryobject.obj: erreur LNK2019: symbole externe non résolu "__declspec (dllimport) public: _ cdecl QCLEvent :: QCLEvent (void)"( _imp_ ?? 0QCLEvent @@ QEAA @ XZ) référencé dans la fonction "void __cdecl` initialiseur dynamique pour 'public: static std :: _ System_error_category std :: _ Erreur_objets :: _ System_object' '(void) "(?? __ E? _System_object @? $ _Error_objects @ H @ std @@ 2V_System_error_category @ 2 @ A @@ YAXXZ)

1> qclbuffer.obj: erreur LNK2001: symbole externe non résolu "__declspec (dllimport) public: _ cdecl QCLEvent :: QCLEvent (void)" ( _imp _ ?? 0QCLEvent @@ QEAA @ XZ)

1> qclcontext.obj: erreur LNK2001: symbole externe non résolu "__declspec (dllimport) public: _ cdecl QCLEvent :: QCLEvent (void)" ( _imp _ ?? 0QCLEvent @@ QEAA @ XZ)