使用Cmake和MinGW编译OpenCV 2.4.13
Compiling OpenCV 2.4.13 with Cmake and MinGW
我在尝试使用Cmake和mingw编译opencv时遇到了这个问题。
Cmake:源代码位于"C:CPP Libraries opencv -2.4.13opencvsources"要构建的二进制文件位于:"C:/CPP Libraries/opencv -2.4.13/opencv/build/x64/mingw"
我已经使用Cmake生成了makefile.
当我运行makefile时:
C:CPP LibrariesOpenCV-2.4.13opencvbuildx64mingw>mingw32-make
这是31%
之后的输出[ 31%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj
C:CPP LibrariesOpenCV-2.4.13opencvsourcesmoduleshighguisrcwindow_w32.cpp: In function 'int icvCreateTrackbar(const char*, const char*, int*, int, CvTrackbarCallback, CvTrackbarCallback2, void*)':
C:CPP LibrariesOpenCV-2.4.13opencvsourcesmoduleshighguisrcwindow_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 LibrariesOpenCV-2.4.13opencvsourcesmoduleshighguisrcwindow_w32.cpp:1853:97: error: 'BTNS_BUTTON' was not declared in this scope
WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
^
moduleshighguiCMakeFilesopencv_highgui.dirbuild.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
CMakeFilesMakefile2: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在MinGW目录下的"commctrl.h"中,但是没有。
C:CPP LibrariesOpenCV-2.4.13Gitopencvbuildx64mingw>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 LibrariesOpenCV-2.4.13Gitopencvmodulescoresrcparallel.cpp: In function 'int cv::getThreadNum()':
C:CPP LibrariesOpenCV-2.4.13Gitopencvmodulescoresrcparallel.cpp:474:45: error: 'pthread_self' was not declared in this scope
return (int)(size_t)(void*)pthread_self(); // no zero-based indexing
^
modulescoreCMakeFilesopencv_core.dirbuild.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
CMakeFilesMakefile2: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
问题(根据Artur Wieczorek)是MinGW默认设置的操作系统版本。要解决这个问题,请在MinGW目录中找到"commctrl.h",然后输入
#if 0
#define _WIN32_IE 0x0300
#endif
然后改成
#if 1
#define _WIN32_IE 0x0500
#endif
展开乐泉的回答:
你不需要 " git版本"。
在http://code.opencv.org/issues/4087:
中绕过2.4.13的error: 'BTNS_AUTOSIZE' was not declared in this scope
。- 打开
- search
/* define _WIN32_IE if you really want it */
编辑下面的文本,使其看起来像这样:
#if 1 #define _WIN32_IE 0x0500 #endif
C:MingWincludecommctrl.h
或等同物。感谢Artur Wieczoek和Vit Shiryaev的提示。
为什么设置?我不知道,但是那些给你MingW的人正试图在他们的维基上说清楚这一点:
在包含windows.h头文件之前,您需要将定义_WIN32_WINDOWS, _WIN32_WINNT, WINVER和/或_WIN32_IE设置为您计划支持的最小平台。这些定义的可能值可以在头文件w32api.h中找到。
我正试图用Android的非自由模块编译OpenCV 3.1,我得到了消息
error: 'pthread_self' was not declared in this scope
通过包含值为"RELEASE"的ANDROID_NDK_LAYOUT解决了这个问题。
我的CMake配置:CMake配置
我创建了"mingw32-make clean"(以防万一)和"mingw32-make"
我有完全相同的问题,所以这个问题实际上是有效的,这让我想知道为什么它被否决了。
我用的是windows10。经过多次尝试,我通过简单地下载openCV-3.1.0而不是2.4.13来解决这个问题。
在迁移到openCV-3.1.0之前,我尝试单独安装code::blocks,然后安装最新的mingw版本。没有帮助。我还尝试使用32位版本的CMake与64位版本生成makefile。也没用。
使用opencv -3.1.0,您不需要像我在其他地方读到的那样编辑任何.h文件。预计mingw32-make的执行时间也会更长。
我解决了pthread_self
错误通过取消检查WITH_PTHREADS_PF
在CMake
我也得到了类似
的东西"opencv/sources/module/core/src/parallel.cpp": In function "int简历::getThreadNum()"......./parallel.cpp:505:45:错误:'pthread'是未在
范围内声明
我尝试了上面的建议,将Mingw/include/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
但是事情没有进展,我仍然被同样的问题困住了。
然后我选中了CMake-GUI标志列表中的"WITH_PTHREADS_PF",然后继续。
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 尝试为 OpenCV 3.4.3 编译opencv_traincascade
- Gtk+ 3 使用 OpenCV 编译时出错
- 如何在 g++ 上使用 opencv 编译项目 c++
- 用Mac OS X Sierra上的OpenCV C 编译Hello World
- 为 OpenCV 编译 MATLAB 绑定
- OpenCV 编译错误与非自由/feature2d.hpp.
- OpenCV 2.4.2 编译"operations.hpp"问题
- Opencv 2.4 编译错误与 objectdetect.hpp.
- 使用 OpenCV 编译头文件.自己的类定义
- 在Windows下为OpenCV编译MinGW库
- Beaglebone上的OpenCV编译错误
- 在mex函数中使用OpenCV:编译后出错
- c++ opencv编译错误- Windows7 64位使用Eclipse CDT
- g++ openCV 编译错误在不存在的行上
- OpenCv编译和链接错误
- OpenCV 2.3编译问题-未定义的参考- Ubuntu 11.10
- 奇怪的opencv编译错误
- OpenCV C++/C 编译错误:未定义对 'cv::fastFree(void*)' 的引用