2016-09-13 3 views
3

У меня возникла проблема при попытке скомпилировать opencv с использованием Cmake и mingw.Компиляция OpenCV 2.4.13 с Cmake и MinGW

для CMake: Исходный код находится в "C: \ CPP библиотеки \ OpenCV-2.4.13 \ OpenCV \ источники" где бинарники goint быть билд в: «C:/CPP Библиотеки/OpenCV- 2.4.13/opencv/build/x64/mingw "

Я уже использовал Cmake для создания файла makefile.

, когда я бегу Makefile:

C:\CPP Libraries\OpenCV-2.4.13\opencv\build\x64\mingw>mingw32-make 

это выход, который я получаю после 31%

[ 31%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj 
C:\CPP Libraries\OpenCV-2.4.13\opencv\sources\modules\highgui\src\window_w32.cpp: In function 'int icvCreateTrackbar(const char*, const char*, int*, int, CvTrackbarCallback, CvTrackbarCallback2, void*)': 
C:\CPP Libraries\OpenCV-2.4.13\opencv\sources\modules\highgui\src\window_w32.cpp:1853:81: error: 'BTNS_AUTOSIZE' was not declared in this scope 
             WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON, 
                       ^
C:\CPP Libraries\OpenCV-2.4.13\opencv\sources\modules\highgui\src\window_w32.cpp:1853:97: error: 'BTNS_BUTTON' was not declared in this scope 
             WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON, 
                           ^
modules\highgui\CMakeFiles\opencv_highgui.dir\build.make:187: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj' failed 
mingw32-make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj] Error 1 
CMakeFiles\Makefile2:2203: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed 
mingw32-make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2 
Makefile:159: recipe for target 'all' failed 
mingw32-make: *** [all] Error 2 

Кто-нибудь знает решение, потому что я понятия не имеют об этом.

// ИЗМЕНИТЬ!

После загрузки версии из репозитория git и попытайтесь ее построить, я получил эти другие ошибки. Я уже пытаюсь изменить #define _WIN32_IE 0x0300 на #define _WIN32_IE 0x0500 в "commctrl.h" в каталоге MinGW, но это не беспокоило.

C:\CPP Libraries\OpenCV-2.4.13\Git\opencv\build\x64\mingw>mingw32-make 
[ 2%] Built target zlib 
[ 6%] Built target libtiff 
[ 11%] Built target libjpeg 
[ 16%] Built target libwebp 
[ 19%] Built target libjasper 
[ 20%] Built target libpng 
[ 26%] Built target IlmImf 
[ 26%] Built target opencv_core_pch_dephelp 
[ 26%] Built target pch_Generate_opencv_core 
[ 26%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/parallel.cpp.obj 
C:\CPP Libraries\OpenCV-2.4.13\Git\opencv\modules\core\src\parallel.cpp: In function 'int cv::getThreadNum()': 
C:\CPP Libraries\OpenCV-2.4.13\Git\opencv\modules\core\src\parallel.cpp:474:45: error: 'pthread_self' was not declared in this scope 
    return (int)(size_t)(void*)pthread_self(); // no zero-based indexing 
              ^
modules\core\CMakeFiles\opencv_core.dir\build.make:990: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/parallel.cpp.obj' failed 
mingw32-make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/parallel.cpp.obj] Error 1 
CMakeFiles\Makefile2:1473: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed 
mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 
Makefile:159: recipe for target 'all' failed 
mingw32-make: *** [all] Error 2 
+0

Похож на ошибку в коде. – usr1234567

+0

вы получили '1337' в своем [почтовом ящике] (https://stackoverflow.com/questions/39461337" https://stackoverflow.com/questions/39461337 ") – n611x007

+0

Я нахожусь на openCV 3.2.0, используя Windows 10 и все еще есть проблема, отмеченная здесь с помощью 'pthread_self()'. Похоже, что это не было исправлено в более поздних версиях - при условии, что это проблема openCV (по сравнению с проблемой MinGW). – Brick

ответ

2

Проблема (согласно Artur Wieczorek) - это версия ОС, установленная MinGW по умолчанию. Для того, чтобы вылечить его найти «commctrl.h» в директории MinGW и что-то вроде

#if 0 
#define _WIN32_IE 0x0300 
#endif 

затем изменить его

#if 1 
#define _WIN32_IE 0x0500 
#endif 
+0

misc: вы могли скопировать этот код на месте (в stackoverflow.com) как текст – n611x007

0

Я пытаюсь скомпилировать OpenCV 3.1 с несвободными модулями для Android, и я получил сообщение

error: 'pthread_self' was not declared in this scope

Она была решена в том числе "ANDROID_NDK_LAYOUT" со значением "Release".

Моя конфигурация CMake: CMake configuration

Я сделал «mingw32-очищаете» (на всякий случай) и «mingw32-марка»

0

У меня был точно такой же вопрос, так этот вопрос на самом деле действует и это заставляет меня задаться вопросом, почему это произошло - проголосовали.

Я на окнах10. После многих попыток я решил это, просто загрузив openCV-3.1.0 вместо 2.4.13.

Прежде чем перейти к openCV-3.1.0, я попытался установить только код :: blocks, а затем установить последнюю версию mingw. Не помогло. Я также попытался создать make-файл, используя 32-разрядную версию CMake по сравнению с 64-разрядной версией. Не помогло.

С opencCV-3.1.0 вам не нужно редактировать какие-либо файлы .h, как я читал в другом месте. Ожидайте более длительного времени выполнения mingw32-make.

+1

Я нахожусь в Windows 10 с openCV-3.2.0. также имеющий эту проблему. Должен ли я вернуться к 3.1.0, чтобы сделать эту работу? (Я бы подумал, что он продолжит работу над более поздней версией, которая у меня есть.) – Brick

0

я решил ошибку pthread_self отключив WITH_PTHREADS_PF в CMake

+0

Вы все еще выполняете параллельное выполнение (предположительно, с чем-то, кроме pthreads), или это заставляет его работать на одном ядре? – Brick

1

расширяет Le Quyen's ответ:

Вы не нужно "версии GIT".

error: 'BTNS_AUTOSIZE' was not declared in this scope для 2.4.13 работается вокруг в http://code.opencv.org/issues/4087:

  1. открытый C:\MingW\include\commctrl.h или эквивалент.
  2. поиск /* define _WIN32_IE if you really want it */
  3. редактировать текст внизу так это выглядит следующим образом:

    #if 1 
    #define _WIN32_IE 0x0500 
    #endif 
    

кредиты Артур Wieczoek и Вит Ширяева за подсказку.


Почему не работает? Я не знаю, но люди, давая вам MinGW пытаются to make this clear on their wiki:

You need to set defines _WIN32_WINDOWS, _WIN32_WINNT, WINVER and/or _WIN32_IE to the minimum platform you plan to support before including the windows.h header file. Possible values for these definitions can be found in the header w32api.h file.

+0

Спасибо! Работал для меня. – Rasoul

0

Я также получаю что-то вроде

"opencv/sources/module/core/src/parallel.cpp": In function "int cv::getThreadNum()" ......./parallel.cpp:505:45: error: 'pthread' was not declared in the scope

Я попытался выше предложение изменить MinGW/включить/commctrl.h как :

#ifndef _WIN32_IE 
/* define _WIN32_IE if you really want it */ 
#if 0       // to 1 
#define _WIN32_IE 0x0300  // to 0x0500 
#endif 
#endif 

но все не было сделано, и я все еще оставался с той же проблемой.

Затем я снял флажок «WITH_PTHREADS_PF» в списке флагов CMake-GUI и продолжал.

+0

У вас все еще есть параллельное исполнение, или вы застряли в одном ядре? – Brick

Смежные вопросы