0x00 环境
- ubuntu9.10
- arm-linux-gcc 4.3.2
0x01 准备工作
安装交叉编译链
我使用的是arm-linux-gcc 4.3.2,解压到目录/usr/local/arm/4.3.2,然后在环境变量PATH中增加/usr/local/arm/4.3.2/bin
安装CMake
Opencv 2.0之后的版本,必须使用CMake创建Makefile。我使用的CMake版本是2.8.2,解压到目录/usr/local/cmake-2.8.2-Linux-i386,然后在环境变量PATH中增加/usr/local/cmake-2.8.2-Linux-i386/bin
0x02 编译openCV
编译
- 解压Opencv 2.4.9
- 创建build目录,作为CMake编译arm版本的工作目录
- 运行cmake-gui
(经过准备工作将CMake解压到/usr/local/cmake-2.8.2-Linux-i386,其中cmake-gui就在该目录下)
可参考http://blog.csdn.net/xy010902100449/article/details/45092757
安装过程出现很多错误
开始测试
测试程序如下:
#include "cv.h"
#include"highgui.h"
const char*picture = "lena.jpg";
int main(int argc,char** argv)
{
IplImage *pImage=cvLoadImage(picture,1);
cvNamedWindow("Test",CV_WINDOW_AUTOSIZE);
cvShowImage("Test",pImage);
cvWaitKey(0);
cvReleaseImage(&pImage);
cvDestroyWindow("Test");
}
然后Makefile如下:
all:test
CFLAGS=-Wall
OPENCV_INCLUDE=-I /usr/local/arm/include/opencv
CC = arm-linux-g++
OPENCV_LINK =-L/usr/local/arm/lib -lcv -lcxcore -lhighgui -lpthread -lrt
%:%.cpp
$(CC) $(OPENCV_INCLUDE) $< -o $@ $(OPENCV_LINK) `pkg-config opencv --libs`-ldl
.PHONY:clean
clean:
rm -f test
此处的pkg-…..–libs两边的 ` 是左上角的,这里写错,编译测试程序的时容易出现:
collect2: error: ld returned 1 exit status
可参考:
http://blog.163.com/baolong_zhu/blog/static/1963110912014530108635/
另外:
http://tieba.baidu.com/p/2425443688
修改
在上面的Makefile中:
OPENCV_LINK =-L/usr/local/arm/lib -lcv -lcxcore -lhighgui -lpthread -lrt
在lib文件下没有发现相关链接文件名,应该修改一下,猜测可能是我与前面参考文章作者使用的opencv的版本不同的缘故,导致编译生成的库文件名字不同,新版本产生的库名前面普遍有lib开头。
- 修改1
-lcv应该是libcv.so库文件,但是我在make install后的lib里没有发现libcv.so文件,于是将其更改 - 修改2
猜测libcxcore.so应该是libopencv_core.so - 修改3
libhighgui.so为libopencv_highgui.so
因此,基于上面的库名的猜测,将链接命令行修改为:
OPENCV_LINK =-L/usr/local/arm/lib -lopencv_calib3d -lopencv_core -lopencv_highgui -lpthread -lrt
但是编译后出现
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /work/opencv-2.4.9/modules/highgui/src/window.cpp, line 483
terminate called after throwing an instance of ‘cv::Exception’
what(): /work/opencv-2.4.9/modules/highgui/src/window.cpp:483: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvNamedWindow
Aborted