无法构建OpenCV 3.2.0(Mingw32)

无法构建OpenCV 3.2.0(Mingw32),opencv,cmake,mingw32,Opencv,Cmake,Mingw32,我知道。。。另一个。。。但是没有人的错误和我的一样,我已经尝试用mingw32构建opencv好几天了 使用mingw构建OpenCV时,命令mingw32 make在尝试编译sources\modules\ts\src\ts_gtest.cpp时失败,错误如下: 我已经尝试了以下几个教程,但没有一个是干净的工作,这是我能得到的最好的东西工作 我所做的: 已安装Mingw并将C:\Mingw\bin\添加到PATH环境变量。 已安装CMake并将其添加到路径。 将OpenCV提取到C:\并为文件

我知道。。。另一个。。。但是没有人的错误和我的一样,我已经尝试用mingw32构建opencv好几天了

使用mingw构建OpenCV时,命令mingw32 make在尝试编译sources\modules\ts\src\ts_gtest.cpp时失败,错误如下:

我已经尝试了以下几个教程,但没有一个是干净的工作,这是我能得到的最好的东西工作

我所做的:

已安装Mingw并将C:\Mingw\bin\添加到PATH环境变量。 已安装CMake并将其添加到路径。 将OpenCV提取到C:\并为文件夹C:\ OpenCV\mingwBuild创建\ 在CMake GUI中,我将源文件夹定义为C:\opencv\sources\并将构建文件夹定义为C:\opencv\mingwBuild\。 点击Configure并选择Mingw Makefiles,使用“Use default native compilers”也明确指定了编译器,结果相同。。 点击Generate,创建Makefile。 我打开C:\Mingw\msys\1.0\msys.bat,以拥有一个加载了所有变量的控制台。我还尝试直接从一个简单的cmd.exe执行,因为路径是为Mingw设置的,但我在编译时遇到了相同的错误。导航到C:\opencv\mingwBuild\并运行mingw32 make。
这就是一段时间后出现错误的地方。有什么想法吗?

由于某种原因,您的gTest没有在Mingw中编译。 因为我现在不打算测试我的代码,所以在配置之后和生成之前,我通过在Cmake中取消选择opencv从instalation中删除了它

有人在第一篇@Dan Masek文章中提到,GTest在mingw下的类型转换中存在这个问题。他们说,根据错误消息,您可以编辑tsgtest.cpp以应用正确的转换。如果您需要此模块,这可能是一个解决方案


@Dan Masek的第二篇评论提到gcc的第5版超越了第4版的问题。因此,获得这样的发行版也可能是一个解决方案。

对我来说,应用此修复程序似乎可以解决此问题:

另见:

对于模块/ts/include/opencv2/ts/tsgtest.h中的MingW编译器,该修复程序基本上通过以下方式将_RTL_CRITICAL_节替换为_CRITICAL_节: 台词

// assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.
// This assumption is verified by
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
struct _RTL_CRITICAL_SECTION;
2016年12月发布的OpenCV 3.2.0中的第723行被替换为

# if GTEST_OS_WINDOWS_MINGW
   // MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two
   // separate (equivalent) structs, instead of using typedef
   typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# else
   // assuming CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.
   // This assumption is verified by
   // WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
   typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# endif

被替换为

GTEST_CRITICAL_SECTION* critical_section_;

不要附加为屏幕截图。以文本形式给出错误。看起来谷歌测试有问题。
GTEST_CRITICAL_SECTION* critical_section_;