2016-12-24 68 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_;