Я разрабатываю «Плагин Qt», который использует OpenMP (поддержка OpenMP может быть включена / отключена с помощью параметра CMake).Я использую MinGW и CMake в качестве среды разработки.Вот как я включаю / отключаю OpenMP в коде:
#ifdef OPENMP_ENABLE
#pragma omp parallel for
#endif for(int i=0; i<volumeData->getZSize(); i++){ .
Я включил OpenMP в файле CMake следующим образом:
OPTION (OPENMP_SUPPORT "Build with OpenMP parallaization enabled")
IF (OPENMP_SUPPORT)
FIND_PACKAGE( OpenMP )
SET(CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS}")
IF ( OpenMP_CXX_FLAGS )
MESSAGE("------- Adding compiler parameter for OpenMP")
ADD_DEFINITIONS(-DOPENMP_ENABLE)
ENDIF()
ENDIF()
и для сборки плагина Qt я настроил CMakeследующим образом:
ADD_DEFINITIONS(-DQT_PLUGIN)
ADD_DEFINITIONS(-DQT_SHARED)
Эта конфигурация прекрасно работает с Linux.В Windows он прекрасно компилируется без поддержки OpenMP.Но при сборке с поддержкой OpenMP выдает ошибку
c: / mingw4 / bin /../ lib / gcc / mingw32 / 4.5.0 /../../../../mingw32/bin/ld.exe: предупреждение: автоматический импорт был активирован без --enable-auto-import, указанного в командной строке.Это должно работать, если в нем не используются постоянные структуры данных, ссылающиеся на символ из автоматически импортируемых DLL.CMakeFiles \ RinzoDLPluginIPThreshold.dir \ ui \ dialogthresholdconfig.cpp.obj: C: /svnosaka3d/trunk/osaka3d/rinzo-platform/src/dlplugins/imageprocplugins/imageprocplugins/thresholdPlgin/ui/dialogepp
CMakeFiles \ RinzoDLPluginIPThreshold.dir \ ui \ dialogthresholdconfig.cpp.obj: в функции ZN21DialogThresholdConfig9slotApplyEv.omp_fn.0':
C:/svn/osaka3d/trunk/osaka3d/rinzo-platform/src/dlplugins/imageprocplugins/threholdPlugin/ui/dialogthresholdconfig.cpp:223:
undefined reference to
omp_get_nu_threads 'C: / svn / osaka3d / trunk / osaka3d / rinzo-platform / thrc / dlproplugin /ui / dialogthresholdconfig.cpp: 223: неопределенная ссылка на omp_get_thead_num'
C:/svn/osaka3d/trunk/osaka3d/rinzo-platform/src/dlplugins/imageprocplugins/threholdPlugin/ui/dialogthresholdconfig.cpp:233:
undefined reference to
omp_get_thead_num 'collect2: ld вернула 1 состояние выхода make [2]: * [dist / plugins / libRinzoDLPluginIPThreshold.dll] Ошибка 1
Вот мой полный файл CMake: http://www.keepandshare.com/doc/view.php?id=2552392&da=y
Любой совет?