2016-12-24 64 views
-1

我知道......另一个这样的......但是没有其他人的错误与我的一样,我一直在试着用mingw32来构建opencv好几天了。Cant'build OpenCV 3.2.0(Mingw32)

当使用MinGW构建OpenCV的命令mingw32-make失败,在某些时候试图编译sources\modules\ts\src\ts_gtest.cpp错误PIC波纹管:

mingw32-make compile error

我试过以下几个教程,但没有工作干净,这是最好的我可以得到的东西工作。

我做了什么:

  • 安装MinGW和添加C:\Mingw\bin\到PATH环境变量。
  • 安装CMake并将其添加到PATH。
  • 提取的OpenCV到C:\和forlder C:\opencv\mingwBuild\
  • 创建在CMake的-GUI我定义源文件夹作为C:\opencv\sources\和建立文件夹作为C:\opencv\mingwBuild\
  • 点击配置并选择Mingw Makefiles,并使用'使用默认的本地编译器'(也明确指定编译器并且结果相同。)。
  • 命中生成,它创建Makefile。
  • 我打开C:\Mingw\msys\1.0\msys.bat有一个所有变量加载的控制台(也尝试直接从一个简单的cmd.exe,因为PATH设置为mingw,但我在编译时得到相同的错误)。导航至C:\opencv\mingwBuild\并运行mingw32-make

而这就是错误在一段时间后出现的地方。有任何想法吗?

+0

更换不重视的屏幕截图。以文本形式提供错误。 – tambre

+1

看起来像谷歌测试的问题。 [\ [1 \]](https://github.com/google/googletest/issues/708)[\ [2 \]](https://github.com/google/googletest/issues/484) –

回答

0

由于某种原因,不能编译Mingw。 由于我不打算测试我的代码(现在),我从安装中删除了opencv_ts(通过在Cmake中,在配置之后和生成之前取消选择它)。

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

@Dan Masek的第二个link中的另一个评论提到gcc的版本5超过了版本4的版本。所以,抓住这样的发行版也可能是一个解决方案。

-1

对于我来说,似乎是由应用此修复程序是固定的:https://github.com/msk-repo01/opencv/commit/9a1835ce6676836ce278d723da4ff55a8f900ff1

(另见:https://github.com/opencv/opencv/issues/8105

的修复主要通过在模块/ TS“_CRITICAL_SECTION”为MinGW编译器使用替换“_RTL_CRITICAL_SECTION” /include/opencv2/ts/ts_gtest.h以下列方式: 中的OpenCV 3.2.0释放从十二月线

// 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; 

(围绕线7232016)是由

# 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_;