codeblocks 编译opencv2.4.13

1,cmake

2. codeblocks 16.1 (自带TDM-GCC mingw

3. opencv 2.4.13  

由于opencv下载下来的.exe安装包实际上是没有mingw(gcc)匹配的/动静态库,因此这些东西需要我们自己使用mingw编译。

首先是cmake配置,直接在source目录命令行下执行 cmake . 即可(注意后边有空格和代表当前目录的点号)

一般来说应该可以了,然后就是使用mingw32-make命令完成编译(过程较长),最后是使用mingw32-make install 生成需要的文件(头文件/动/静态库)

复制代码
C:.
├─include
│  ├─opencv
│  └─opencv2
│      ├─calib3d
│      ├─contrib
│      ├─core
│      ├─features2d
│      ├─flann
│      ├─gpu
│      │  └─device
│      │      └─detail
│      ├─highgui
│      ├─imgproc
│      ├─legacy
│      ├─ml
│      ├─nonfree
│      ├─objdetect
│      ├─ocl
│      ├─photo
│      ├─stitching
│      │  └─detail
│      ├─superres
│      ├─ts
│      ├─video
│      └─videostab
└─x86
    └─mingw
        ├─bin
        └─lib
复制代码

 

将bin加入系统path变量中。

原始错误输出如下:

复制代码
C:\opencv\sources\modules\highgui\src\window_w32.cpp: In function 'int icvCreateTrackbar(const char*, const char*, int*, int, CvTrackbarCallback, CvTrackbarCallback2, void*)':
C:\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:\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:2198: 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
复制代码

 

主要就是有几个变量没有找到,后来在一个opencv的issues里找到了解答,大概意思就是在mingw的头文件commctrl.h中,对于上面的变量宏的定义实际上是由_WIN32_IE是否定义来决定的,然而我们找到这个头文件的时候,他的写法是这样:

复制代码
#include 
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 0
#define _WIN32_IE    0x0300
#endif
#endif
复制代码

看提示我们也知道,默认根本就不可能找到_WIN32_IE这个变量(后来查了一下,这个变量应该是规定所谓的windows的ie浏览器版本的变量,不知道怎么和opencv扯上了关系),所以上面那个issues的建议是改成:

复制代码
#include 
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 1
#define _WIN32_IE    0x0500
#endif
#endif
复制代码

那个0x0500也是我照改的,改完之后我确实能编译通过了,不知道保持原样会怎么样,个人估计 不编译帮助的话,应该就没有这个错误了,只有帮助才和 IE 相关啊。

你可能感兴趣的:(openCV)