Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MinGW上支持OpenMP的Qt插件:未定义引用?_C++_Qt_Mingw_Cmake_Openmp - Fatal编程技术网

C++ MinGW上支持OpenMP的Qt插件:未定义引用?

C++ MinGW上支持OpenMP的Qt插件:未定义引用?,c++,qt,mingw,cmake,openmp,C++,Qt,Mingw,Cmake,Openmp,我正在开发一个使用OpenMP的“Qt插件”(可以使用CMake参数启用/禁用OpenMP支持)。我使用MinGW和CMake作为开发环境。 这是我在代码中启用/禁用OpenMP的方式: #ifdef OPENMP_ENABLE #pragma omp parallel for #endif for(int i=0; i<volumeData->getZSize(); i++){ . 为了构建Qt插件,我对CMake进行了如下配置: OPTION (OPENMP_SUPPORT

我正在开发一个使用OpenMP的“Qt插件”(可以使用CMake参数启用/禁用OpenMP支持)。我使用MinGW和CMake作为开发环境。 这是我在代码中启用/禁用OpenMP的方式:

#ifdef OPENMP_ENABLE
#pragma omp parallel for
#endif  for(int i=0; i<volumeData->getZSize(); i++){  .
为了构建Qt插件,我对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()
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: 警告:已禁用自动导入 未激活--启用自动导入 在 命令行。这 除非涉及 常量数据结构引用 来自自动导入DLL的符号。 CMakeFiles\RinzoDLPluginIPThreshold.dir\ui\dialogthresholdconfig.cpp.obj:C:/svnosaka3d/trunk/osaka3d/rinzo平台/src/dlplugins/imageprocplugins/thresholdPlgin/ui/dialogthresholdconfig.cpp:221: 未定义的引用
GOMP_parallel_stat'
CMakeFiles\RinzoDLPluginIPThreshold.dir\ui\dialogthresholdconfig.cpp.obj:C:/svnosaka3d/trunk/osaka3d/rinzo平台/src/dlplugins/imageprocplugins/thresholdPlgin/ui/dialogthresholdconfig.cpp:221:
未定义的引用
GOMP\u平行\u端

CMakeFiles\RinzoDLPluginIPThreshold.dir\ui\dialogthresholdconfig.cpp.obj: 在功能上
zn21对话框阈值配置9slotaplyev.omp\u fn.0':
C:/svn/osaka3d/trunk/osaka3d/rinzo平台/src/dlplugins/imageprocplugins/threholdPlugin/ui/dialogthresholdconfig.cpp:223:
未定义的引用
omp\u获取\u nu\u线程' C:/svn/osaka3d/trunk/osaka3d/rinzo平台/src/dlplugins/imageprocplugins/threholdPlugin/ui/dialogthresholdconfig.cpp:223: 未定义的引用
omp\u get\u thead\u num'
C:/svn/osaka3d/trunk/osaka3d/rinzo平台/src/dlplugins/imageprocplugins/threholdPlugin/ui/dialogthresholdconfig.cpp:233:
未定义的引用
omp\u get\u thead\u num'集合2:ld 返回1退出状态make[2]:* [dist/plugins/libRinzoDLPluginIPThreshold.dll] 错误1

这是我完整的CMake文件:


任何提示?

OpenMP需要一个运行库(在gcc的情况下称为
libgomp
),它必须链接到创建的可执行文件中。因此,仅将OpenMP标志添加到编译标志是不够的,还必须将它们添加到链接标志:

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

指向完整CMake文件的链接需要注册。你能用一个可公开访问的站点替换它吗?
#if defined(_OPENMP)
// use openmp
#endif