请先观看《linuxubuntu12.04上opencv2.4.7 cmake2.8.12.1环境搭建》,对linux上编译opencv有基本了解再来看这篇文章效果最佳
经过了昨天一天苦逼的研究opencv源码、arm-linux编译器工作原理和坚持不懈的make,我终于移植成功了opencv-2.4.7for arm库到OK6410上,遇到了各种问题,研究了很长时间,连上课时候都在想原因和解决方案,都让我想翘课。。。
接下去我会简单分析整个移植过程,讲解一些网上常见问题,不过我建议大家还是自己先去试试移植看看,花点时间就能学到很多。
首先介绍我的开发环境:
主机OS:UBUNTU12.04
宿主机:飞凌OK6410
宿主机内核:linux3.6
opencv版本:opencv2.4.7
cmake版本:cmake2.8.12.1
交叉工具链:Sky arm-linux4.3.3 天嵌
接下去还是先开始利用cmake工具定制opencv,cmake的图像界面比较容易上手,所以这里用cmake-gui讲解cmake过程:
1.虚拟机的童鞋可以先备份虚拟文件
2.su- root切换到root用户忽略权限问题
3.mkdir/home/opencv/opencv-arm/ 存放makefile和一些相关cmake配置文件
4.cmake-gui运行cmake gui
5.跟移植到linux-pc上一样填入sourcecode和build the binaries目标路径
6.点击Configure,保持unixmakefiles选项,选择specify options for corss-compiling来选择编译器路径
7.operating system填入os名,即编译器名arm-linux os version这个可以不填,我不清楚这个填内核版本还是编译器版本,compilers C填入编译器arm-linux-gcc的elf路径,C++填入编译器arm-linux-g++的elf路径,target root是寻找lib和include文件的,这些文件都在arm-linux编译器文件路径下,比如我的编译器路径就是/home/arm/Sky/opt/EmbedSky/4.3.3/
8.finish后会提示:error inconfiguration procss,project files may be invalid,指的是它默认配置对你给定的os是不支持的。这是我遇到的第一个问题,究竟什么不支持呢,为了通过配置,我去了解cmake都为opencv配置了些什么(其实看他提示的出错信息就已经知道问题在哪,但是也不能稀里糊涂的配置,我还是决定看看配置项):
opencv-arm/CMakeCache.txt是cmake记录配置信息的文件,也是makefile重要信息来源,这里的配置选项都有注释,可以方便大家理解配置选项的含义。
重要选项:
BUILD开头的都是构建文件,选上则将寻找对应源码然后构建在opencv库中
WITH开头的都是opencv对相应选项内容的支持,选上则表示opencv库将支持所选内容,所以开发板不支持的选项不要选。
CMAKE_BUILD_TYPE构建类型,一般填入Release构建发布版本
CMAKE_INSTALL_PREFIX安装路径,可以指定自己需要安装的路径
我的安装路径是usr/local/arm/opencv/-> bin/ 存放elf
-> include/ 存放opencv opencv2
-> lib/ 存放.so .a