环境:
Ubuntu12.10 + friendlyarm smart210 + arm-linux-gcc 4.3.3 + opencv2.3.1 + cmake 2.8.7
准备工作:
下载opencv2.3.1安装包,arm-linux交叉编译器工具包
解压arm-linux-gcc 4.3.3.tar.gz: tar zxvf arm-linux-gcc 4.3.3.tar.gz -C /
-C的意思是改变解压路径(change),注意C是大写,这时交叉编译工具会自动解压到/usr/local/arm/4.3.3
解压opencv2.3.1
建立文件夹 /usr/opencv/ 将opencv的源代码放在此处,解压后为/usr/opencv/OpenCV-2.3.1
安装cmake,在此不累述
注意:如果是在虚拟机里操作,在windows下载了文件用vmtools共享文件夹来拿安装包,一定要先将其拷贝至Ubuntu中ext格式的文件系统中
因为共享文件夹的文件格式不完全被Linux兼容,解压时经常会出现问题,即使当时不出现问题,日后的问题恐怕更令人生畏
编译arm板使用的opencv库:
首先我们建立两个文件夹:
存放makefile的文件夹:/home/usrname/opencv-cmake
存放编译完成的opencv库的文件夹:/usr/local/
cmake会生成makefile以及其所需文件,会放在建立的第一个文件夹;
arm所用的opencv库会放在第二个文件夹,放在/usr/local不是一个明智的选择,最好自己建立文件夹,再次先偷个懒
cmake的使用:
在终端中root登陆,键入命令cmake-gui,打开cmake图形界面,填入如下内容:
之后点击config,在出现的界面中如下选择:
点击next之后,设置如下:
点击finish,会自动config,这时我们需要修改一些参数:
CMAKE_BUILD_TYPE :填写 Release
CMAKE_INSTALL_PREFIX :填写我们为arm版opencv建立的文件夹
然后去掉WITH_TIFF的勾选,至于WITH_JPAG之类的选项,按需选择,但是需要Ubuntu中先装好相应的库
配置结束,点击config,最后点击generate.
编译:
进入我们生成makefile的文件夹,修改CMakeCache.txt ,找到CMAKE_EXE_LINKER_FLAGS:STRING,在后面加上-pthread-ldl -lrt
然后make编译,make install安装.
我们就得到了arm版的opencv,这时进入/usr/local,建立pkgconfig文件夹,进入该文件夹建立opencv.pc文件
编写这些库的pkgconfig文件,至于编写方式,也可以偷个懒,先编译Ubuntu版本的opencv,编译过程类似,不是使用交叉编译器,编译完成会自动生成pkgconfig文件夹
拿到这个文件夹稍作修改,就能变成我们想要的文件了
测试:
编辑opencv文件,用以下命令编译:
arm-linux-gcc main.c -o arm.o `pkg-config --libs --cflags opencv` -lrt -pthread
如果报错:
如果编译时出现:
main.cpp:7: warning: deprecated conversion from string constant to 'char*'
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /home/william/opencv/lib/libopencv_core.so when searching for -lopencv_core
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lopencv_core
collect2: ld returned 1 exit status
......
则可以选择无视,但在开发板上会报错,这时在开发板上将程序放在合适的目录下,确定报错的目录有我们的opencv库即可