C++ MinGW上支持OpenMP的Qt插件:未定义引用?
我正在开发一个使用OpenMP的“Qt插件”(可以使用CMake参数启用/禁用OpenMP支持)。我使用MinGW和CMake作为开发环境。 这是我在代码中启用/禁用OpenMP的方式: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
#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