2016-12-24 2 views
-1

Я знаю ... Еще один из этого ... Но никакая другая ошибка не такая же, как у меня, и я пытаюсь создать opencv с mingw32 в течение нескольких дней.Cant 'build OpenCV 3.2.0 (Mingw32)

При создании OpenCV с MinGW команда mingw32-make терпит неудачу в какой-то момент пытается скомпилировать sources\modules\ts\src\ts_gtest.cpp с ошибкой рис ниже:

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», используя «Использовать собственные компиляторы по умолчанию» (также явно указаны компиляторы, и результат одинаков.).
  • Hit Generate, который создает Makefile.
  • Я открыл C:\Mingw\msys\1.0\msys.bat, чтобы иметь консоль со всеми загруженными переменными (также попробовал прямо из простого cmd.exe, учитывая, что PATH установлен для mingw, но я получаю ту же ошибку в компиляции). Перейдите к C:\opencv\mingwBuild\ и запустите mingw32-make.

И вот тут ошибка появляется через некоторое время. Есть идеи?

+0

Не придавайте в скриншоте. Дайте ошибку как текст. – tambre

+1

Похож на проблему с тестом google. [\ [1 \]] (https://github.com/google/googletest/issues/708) [\ [2 \]] (https://github.com/google/googletest/issues/484) –

ответ

0

По какой-то причине не происходит компиляция в Mingw. Поскольку я не намерен тестировать свой код (на данный момент), я удалил opencv_ts из instalation (отменив его в Cmake, после настройки и до генерации).

Кто-то упоминает, в первом link @ Дан Масек ссылается на то, что у GTest есть эта проблема с преобразованием типа под mingw. Говорят, что вы можете отредактировать ts_gtest.cpp, чтобы применить правильное преобразование, в соответствии с сообщением об ошибке. Это может быть решением, если вам нужен этот модуль.

Еще один комментарий к второму link @Dan Masek упоминает, что версия gcc версии 5 превосходит проблему, которая имеет версию 4. Таким образом, получение такого дистрибутива также может быть решением.

-1

Для меня это, кажется, фиксируется путем применения исправления: https://github.com/msk-repo01/opencv/commit/9a1835ce6676836ce278d723da4ff55a8f900ff1

(Также см: https://github.com/opencv/opencv/issues/8105)

Исправление в основном заменяет «_RTL_CRITICAL_SECTION» на «_CRITICAL_SECTION» для компиляторов MinGW в модулях/ц /include/opencv2/ts/ts_gtest.h в следующим образом: линии

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

(вокруг линии 723 в версии OpenCV 3.2.0 с декабря2016) заменены

# 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_; 
Смежные вопросы