我知道......另一个......但没有其他人的错误与我的相同,我一直在尝试用mingw32构建opencv几天。
使用mingw构建OpenCV时,命令mingw32-make
在某些时候尝试编译sources\modules\ts\src\ts_gtest.cpp
失败,错误图片如下:
我已经尝试过几个教程,但没有一个干净利落,这是我能用的最好的工作。
我做了什么:
C:\Mingw\bin\
添加到PATH环境变量。C:\
并创建forlder C:\opencv\mingwBuild\
C:\opencv\sources\
,并将文件夹构建为C:\opencv\mingwBuild\
。Mingw Makefiles
,使用'使用默认本机编译器'(还明确指定了编译器,结果相同。)。C:\Mingw\msys\1.0\msys.bat
以获得一个加载了所有变量的控制台(直接从一个简单的cmd.exe尝试,假设为mingw设置了PATH,但我在编译时遇到同样的错误)。导航至C:\opencv\mingwBuild\
并运行mingw32-make
。这就是错误在一段时间后出现的地方。有什么想法吗?
答案 0 :(得分:0)
由于某种原因,明天你没有编译。
由于我不打算测试我的代码(目前),我从安装中删除了opencv_ts
(通过在配置之后和生成之前在Cmake中取消选择它)。
有人提到,在@Dan Masek提到的第一个link中,GTest在mingw下有类型转换这个问题。他们说您可以根据错误消息编辑ts_gtest.cpp
以应用正确的转化。如果您需要这个模块,这可能是一个解决方案。
@Dan Masek的第二个link中的另一个评论提到gcc的第5版超越了第4版的问题。因此,获得此类发行版也可能是一种解决方案。
答案 1 :(得分:-1)
对我而言,似乎可以通过应用此修复程序来修复:https://github.com/msk-repo01/opencv/commit/9a1835ce6676836ce278d723da4ff55a8f900ff1
(另见:https://github.com/opencv/opencv/issues/8105)
修复基本上取代了" _RTL_CRITICAL_SECTION" by" _CRITICAL_SECTION"对于modules / ts / include / opencv2 / ts / ts_gtest.h中的MingW编译器,采用以下方式: 行
// 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
和
_RTL_CRITICAL_SECTION* critical_section_;
替换为
GTEST_CRITICAL_SECTION* critical_section_;