Qt with OpenMP support on MinGW: Undefined link?

I am developing a "Qt Plugin" that uses OpenMP (OpenMP support can be enabled / disabled using the CMake parameter). I use MinGW and CMake as a development environment. Here's how I enable / disable OpenMP in code:

#ifdef OPENMP_ENABLE
#pragma omp parallel for
#endif  for(int i=0; i<volumeData->getZSize(); i++){  .

I included OpenMP in the CMake file as follows:

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()

and to create the Qt plugin, I configured CMake as follows:

ADD_DEFINITIONS(-DQT_PLUGIN)

ADD_DEFINITIONS(-DQT_SHARED)

This configuration compiles fine with Linux. On Windows, it compiles fine without OpenMP support. But when building with OpenMP support, this leads to an error

:/mingw4//../Library/GCC/mingw32/4.5.0/../../../../mingw32//ld.exe: : --enable-auto-import . , DLL. CMakeFiles\RinzoDLPluginIPThreshold.dir\\dialogthresholdconfig.cpp.obj: C:/svnosaka3d/trunk/osaka3d/rinzo-platform/src/dlplugins/imageprocplugins/thresholdPlgin/ui/dialogthresholdconfig.cpp: 221: undefined GOMP_parallel_stat' CMakeFiles\RinzoDLPluginIPThreshold.dir\ui\dialogthresholdconfig.cpp.obj:C:/svnosaka3d/trunk/osaka3d/rinzo-platform/src/dlplugins/imageprocplugins/thresholdPlgin/ui/dialogthresholdconfig.cpp:221: undefined reference to GOMP_parallel_end

CMakeFiles\RinzoDLPluginIPThreshold.dir\\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' :/svn/osaka3d/trunk/osaka3d/rinzo-platform/src/dlplugins/imageprocplugins/threholdPlugin/ui/dialogthresholdconfig.cpp: 223: undefined 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]: * [//libRinzoDLPluginIPThreshold.dll] 1

CMake: http://www.keepandshare.com/doc/view.php?id=2552392&da=y

?

+3
1

OpenMP ( libgomp gcc), . OpenMP , :

set_target_properties(<target_name> LINK_FLAGS "${OpenMP_CXX_FLAGS}")

, <target_name> .

, , OPENMP_ENABLE . OpenMP , _OPENMP , OpenMP (, ). OpenMP :

#if defined(_OPENMP)
// use openmp
#endif
+3

Source: https://habr.com/ru/post/1788128/


All Articles