OpenCV在ARM上的移植

与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作。

网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方法很麻烦,不仔细操作很容易出错,我的方法是尽可能的利用现成的工具,尽量图形化界面配置操作,方便编译配置。

软硬件环境


宿主机:Ubuntu 12.04 32bit

开发板:OK6410

OpenCV: 2.4.3

其他:

arm-linux-g++ 4.3.2 / arm-linux-gcc 4.3.2

CMake-gui 2.8.10

Cmake的安装


OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake。

ubuntu下安装cmake比较简单,

apt-get install cmake

如果觉得自带的版本不符合要求,可以下载安装包。

下载最新版的安装包:

http://www.cmake.org/cmake/resources/software.html

这里下载已经编译好的,这样只需要解压至需要的目录下即可使用:

tar zxvf cmake-2.8.10.2-Linux-i386.tar.gz –C /usr/local/

设置环境变量:

sudo gedit /home/emouse/.bashrc

在打开的文件后添加:

export PATH=$PATH:/usr/local/cmake-2.8.10.2-Linux-i386/bin

查看版本,测试是否安装成功:

root@emouse:/home# cmake --version
cmake version 2.8.10.2

转载注明:http://emouse.cnblogs.com/

OpenCV 的交叉编译


解压OpenCV压缩文件,得到文件夹。

#cmake-gui 打开cmake的gui界面,开始进行配置,配置过程如下图所示:

1、选定解压后的源文件和将要编译的文件目录,这个自己之前先建好。

2、点击Configure 选择工程类型,选择交叉编译,点击下一步。

3、在下图的界面中选择交叉编译工具链以及库文件相关信息,按照图中的进行填写,其中红框部分为交叉编译工具链的实际路径,根据宿主机实际安装路径填写。

4、点击Finsh完成初步配置。

5、此时主界面如下图所示,这时Cmake会读取程序的一些配置信息,可以再下图红框中对每一个编译选项进行修改,这里去掉WITH_TIFF支持并修改安装路径,其他配置可以根据需求选择。

通过终端进入OpenCV-ARM目录,make编译,编译过程中出错如下:

Linking CXX executable ../../bin/opencv_perf_core
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_init'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_unlock'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'
../../lib/libopencv_core.so: undefined reference to `pthread_key_create'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'
../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree'
../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_lock'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'
../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_destroy'
../../lib/libopencv_core.so: undefined reference to `pthread_once'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_core.so: undefined reference to `pthread_spin_trylock'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_perf_core] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_perf_core.dir/all] 错误 2
make: *** [all] 错误 2

关于TIFF的报错,是因为一开始我勾选了TIFF的支持,而这个支持是需要宿主机中安装相应的程序的,所以报错,可以打开cmake 去掉勾选。 其他报错经过查找找到以下解释:

编译时发现如下错误:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'

原因是cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项

此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt

按照此方法更改对应文件,如下图所示:

此处在CMakeCache.txt 的173行,添加-lpthread -lrt,然后继续编译。编译过程十来分钟左右,编译成功结果如下:

运行make install进行安装,在我的安装目录中就会多出以下几个文件夹:

lib文件夹即生成的库文件,拷贝到开发板对应目录即可。

★emouse 思·睿博客文章★原创文章转载请注明:http://emouse.cnblogs.com

OpenCV在ARM上的移植相关推荐

  1. MPlayer在ARM上的移植(S5PV210开发板)

    MPlayer 1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S5PV210下效果非常不好.换成使用libmad效果不错.因此MPlayer 在ARM-Linux的最简单的移植只 ...

  2. 移植c语言算法到arm上,μCOS-II移植到ARM处理器上的几个要点

    原标题:μCOS-II移植到ARM处理器上的几个要点 本文主要介绍μCOS-II移植到ARM处理器上的几个要点,如下所示: uCOS II在ARM处理器上移植过程中的中断处理 uCOS II是一个源码 ...

  3. OpenCV在IMX6上的移植

    最近接触图像处理的项目,花了一周时间把OpenCV的移植搞定,现记录下自己的安装过程.出现的错误和解决办法. 环境:ubuntu10.0.4+ eclipse luna + OpenCV2.4.13 ...

  4. qtopia-opensource-4.2.2在arm上的移植

    Qtopia Core 4是QT/embedded的最新版,网上找很久都没有相关教材,尽是QT/embedded 2的版本.我刚学,干脆就直接上最新版 ^_^ 费了不少时间,作个记录,方便有需要的朋友 ...

  5. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题...

    问题描述: 这个实际上是最后一部的问题,将生成的共享库文件放入到了/usr/local/opencv-arm/lib下,并且设置了LD_LIBRARY_PATH中为/usr/local/opencv- ...

  6. 微软在 ARM 上成功移植 OpenJDK for Windows 10

    去年微软宣布收购 jClarity,用在了 Azure 上的 Java 工作负载,以平台之势加大了对 Java 的支持,而近期,开发团队完成了在基于 Arm(AArch64)的设备上移植适用于 Win ...

  7. 实时操作系统μCOS-II在LPC2210上的移植研究与实现

    摘  要:嵌入式实时操作系统在目标处理器平台上的移植是嵌入式软件开发的基础和前提.论文实现了源码公开的嵌入式实时操作系统μC/OS-II在ARM7微控制器LPC2210上的成功移植,并研究了在移植过程 ...

  8. Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

    Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...

  9. OpenCV在G-API上移植各向异性图像分割

    OpenCV在G-API上移植各向异性图像分割 在G-API上移植各向异性图像分割 介绍 快速入门:使用OpenCV后端 检查calcGST() 运行G-API图 G-API初始版本:完整列表 检查初 ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(十一)spspps和AudioSpecificConfig介绍(完结)
  2. 从理论到工具 - 带你全面了解自动化测试框架
  3. mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验
  4. AVL树(一)之 C语言的实现
  5. 不定字段数目的数据库表设计和数据结构
  6. 拒绝卡顿,揭秘盒马鲜生 Android 短视频秒播优化方案
  7. centos 编译nginx php mariadb,centos7安装nginx+mariadb+php-fpm
  8. 互联网是由多个计算机相互连接而成,计算机网络
  9. Spring Boot笔记-@ComponentScan初步解析
  10. 获取SQL-SERVER数据库insert into操作的主键返回值
  11. android怎么实现记住密码功能,Android实现用户登录记住密码功能
  12. 国家/地区 语言代码缩写
  13. 抢椅子游戏java_抢椅子游戏作文(精选10篇)
  14. itext 生成pdf 化学表达式或者字符的上标,下标不显示
  15. 嵌入式软件面试问题总结
  16. Excel2007版的常用功能(7):Excel公式与函数
  17. 制造企业使用云平台可以做什么
  18. react 是怎么运行的?
  19. 【C语言刷题】字符串逆序
  20. 干货 | 携程机票 App KMM 跨端生产实践

热门文章

  1. wingide的使用方法积累
  2. OpenCV学习资料收集
  3. html元素排序,HTML中的table里面的元素排序
  4. oracle的schema的基本概念及与User的区别
  5. leetcode算法题--只有两个键的键盘
  6. java 定义类变量初始化吗_Java的变量有哪些类型?变量如何定义?如何初始化?请说明理由并举例_学小易找答案...
  7. 详解Spring Boot配置文件之多环境配置
  8. mahout in Action研读(1)-给用户推荐图书
  9. 使用Xshell密钥认证机制远程登录Linux
  10. EXC_BAO_ACCESS引起的奔溃信息