姓名:刘强
【嵌牛导读】
GCC和opencv官网提供的编译好的库存在兼容问题,本文介绍如何利用cmake和GCC编译出一个和当前环境兼容的opencv库
【嵌牛鼻子】
OpenCV CMake GCC
【嵌牛提问】
如何编译出一个与当前环境兼容的opencv库?
【嵌牛正文】
上一篇搭建OpenCV开发环境:翻车补救指南(上)最后提到,诸如:
//播放一段名为“input.avi”的视频
#include <cv.h>
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture;
capture.open("input.avi");
while(true)
{
Mat frame;
capture>>frame;
imshow("videotest",frame);
waitKey(10);
}
return 0;
}
这样使用了C++调用接口的代码,GCC编译链接的时候无法和opencv官网提供的库兼容,这是因为opencv官网的库是用Visual Studio编译的,从win pack解压出来的文件目录可以看出,库文件存在这样三个版本:
分别表示用vc2010编译出来的版本,vc2011编译出来的版本,以及vc2012编译出来的版本。Visual Studio每一代版本内置的编译器都会和之前有些不容,因此,使用Visual Studio+opencv配置开发环境时一定要选用和下载的opencv相适应的VS版本。但是微软提供的VS社区版往往只提供了最新的版本,我们又想要使用opencv2.4.9,这时,就遇到兼容性问题了。
解决方案
问题的冲突主要在于官网提供的库是用Visual Studio编译的,而我们的环境里使用的是GCC编译器。既然opencv是开源的,我们可以很容易从官网下载到源代码,那么将其源代码用GCC编译成库文件就好了,这样编译出来的库一定是与当前编译环境兼容的。
-
step1
安装cmake 点此下载 -
step2
运行cmake,在where is the source code中填入OpenCV源代码文件的路径,这里用的路径是“E:/MyLib/opencv_2410/sources”;在where to build the binaries中填入编译文件需要存放的路径,这里用的是“E:/OpenCV2.4.10/MinGW/Debug”(存放路径文件自己定义新建一个即可):
-
step3
点击“Configure”;在Specify the generator for this project中选择CodeBlocks - MinGW Makefiles,选中Specify native compilers,点击“Next”;
-
step4
选择编译器路径,这里Compilers: C 选择目录为“codeblocks安装路径/MinGW/bin/gcc.exe”; C++ 选择目录为 “codeblocks安装路径C:/MinGw/bin/g++.exe”,点击“Finish”;
-
step5
然后再次点“Configure”;
-
step6
等走完进度条,选择需要的Generate选项,此处可以不操作直接点“Generate”,走完进度条便生成了“MinGW Makefiles”;
-
step7
之后用mingw对其进行编译,cmd打开命令提示符窗口,进到刚才的保存目录,这里是“E:/opencv2.4.10/MinGW/Debug”,输入“mingw32-make”,回车;等待运行完毕后,输入 mingw32-make install,回车;(此过程大约需1-2个小时) -
step8
运行完毕后便生成了mingw版的OpenCV库,进入“E:/opencv2.4.10/MinGW/Debug/install”文件夹,便可以看到所需的头文件和库文件;
-
step9
参考“搭建OpenCV开发环境:翻车补救指南(上)”中头文件、库文件以及动态库调用的设置方法,设置完成后,最开始给出的代码例程便可顺利运行: