在ubuntu18.04上交叉编译opencv2.4.9
标签: OpenCV
公司项目中用到了opencv,但是当时项目比较着急,因此同事直接给了编译好的opencv的库,自己并没有尝试从头去编译,项目结束后有点时间,于是自己尝试去从头交叉编译opencv,现在把过程记录一下,后面再需要对OpenCV别的版本进行交叉编译的时候可以直接看自己的笔记。
环境
PC:vmware + ubuntu18.04
交叉编译工具链:arm_hisiv300_linux(HISI3536的交叉编译工具)
opencv版本:opencv-2.4.9.zip
交叉编译
下载opencv2.4.9源码,然后解压,
安装cmake-gui
1 sudo apt-get install cmake-gui
创建build文件用于编译opencv,创建install文件夹作为输出目录
1 cd opencv-2.4.9
2 mkdir build
3 mkdir install
然后执行cmake-gui,出现如下界面
选择source code为opencv2.4.9的路径,选择build the binaries为我们刚才新创建的build文件夹。
然后点击configure出现如下画面
选择specify options for cross-compiling,next,然后出现如下界面。
在operating system填写arm-hisiv300-linux,
Compiler C选择自己的arm-hisiv300-linux-gcc的路径,
C++编译器选择arm-hisiv300-linux-g++的安装路径,
Target root选择自己的交叉交叉编译工具所在的文件夹,并且选择search in Target root ,then native system.
然后点击configure,这时候会出现error inconfiguration process,project files may be invalid.
解决方法是在search中搜索CUDA,把WITH_CUDA取消掉,搜索opencl把WITH_OPENCL去掉,再次选择就不会出现问题。
在search中搜索install,把CMAKE_INSTALL_PREFIX修改为自己刚才创建的install文件夹,
如果想让我们编译出来的opencv库为静态链接库的话,可以在search里面搜索shared,把BUILD_SHARED_LIBS去掉,这样编译出来的opencv库就是.a结尾的静态链接库了。
另外,configure的过程中可能还会有下面的提示
然后很多编译opencv的博客教程在编译opencv的时候会有一步: 从网上zlib、libjpeg、libpng、tiff、ffmjpeg的源码,然后对这几个库的源码进行交叉编译,实际上不用这样做,我们下载的opencv源码里面有这几个库的源码,我们只需要在cmake-gui上把相应的选项选上,这样编译opencv的过程中会把这个库编译出来(第三方库生成在build\3rdparty\lib),例如
这样之后就能产生jpeg库了,同样的方法可以编译zlib等其他几个库,
然后点击generate,然后就可以关闭cmake_gui了,
然后开始编译
1 cd build/
2 make
编译的过程中会报对pthread_once未定义的引用,对pthread_spin_lock未定义的引用等错误,
解决方法:打开build文件夹下的CMakeCache.txt,定位到190行左右,把CMAKE_EXE_LINKER_FLAGS:STRING =改为CMAKE_EXE_LINKER_FLAGS:STRING = -pthread -lrt
然后make
然后make install
这样就会在install文件夹下生成opencv库,在install的share-3rdparty文件夹下会生成zlib jpeg等几个库。
测试验证
编译完opencv之后想在项目中对自己编译完的OpenCV库进行验证,出现错误,
刚开始觉得是自己编译的opencv存在问题,于是一遍又一遍的从头编译,问题依然存在,差点要重新安装了ubuntu14版本重新编译,直到搜索到下面的答案
原来是因为imgproc是依赖于core的,被依赖的库要放到后面,于是修改自己的makefile,把-loencv_core放到了-lopencv_imgproc的后面,于是编译通过,程序测试运行通过.
success!
补充:有一次在HI3559A上要用opencv,把库编译出来加到工程里面编译的时候提示很多未定义,这时候把-lopencv_imgcodecs -lopencv_imgproc 放到最前面就好了,就是因为这两个库依赖core库,所以要把它们放到core库前面。
智能推荐
Ubuntu上交叉编译opencv及opencv_contrib并移植到ARM板之二
按照上篇之一的进度,已经编译及安装好了opencv库及opencv_contrib扩展库。 安装好库之后,无非就还有两件事要做:1、配置环境 2、实例编译 3、移植至开发板 一、环境配置 说明:pkg-config是用于编译时指定第三方库的头文件路径及链接库路径的,我们需要借助pkg-config来编译opencv程序。 pk...
Ubuntu18.04 安装ELDK交叉编译Linux kernel
ELDK 下载 ELDK(Embeded Linux Development Kit),嵌入式Linux开发完成开发套件。 安装包下载地址 官方文档 安装过程中遇到的问题 这里下载的是最新的安装镜像(eldk-5.6-armv5te.iso) 注:5.3和5.4的版本在Ubuntu18.04和Fedora20上安装不成功,一直报find: invalid mode ’+111&lsqu...
ubuntu18.04下交叉编译OpenCV3.4.9到ARM64位平台(aarch64-linux-)
一、环境介绍 ubuntu版本: VM虚拟机运行ubuntu18.04 64位 OpenCV版本: 3.4.9 目标开发板: RK3399 二、相关源码包下载地址 OpenCV源码下载地址: https://opencv.org/releases/ 选择3.4.9版本下载。 aarch64-linux-交叉编译器下载地址: https://d...
web安全简易规范123
web安全,大公司往往有专门的安全开发流程去保证,有专门的安全团队去维护,而对于中小网络公司,本身体量小,开发同时兼带运维工作,时间精力有限,但是,同样需要做一些力所能及的必要的事情。有时候,安全威胁并不是因为你的防盗窗被人撬开了,而是你晚上睡觉的时候忘了关门,而关上门对开发来说也许只是举手之劳。 1、不要用root,确定使用的中间件和框架是否默认打开了后门 我们总会在线上使用部署一些中间件、开源...
猜你喜欢
html5拖放--15行js代码实现两个div内容互换
本文首发于我的个人博客:http://cherryblog.site/ ,欢迎大家前去参观 本文项目地址,sortable插件地址:https://github.com/sunshine940326/sortable demo地址:https://github.com/sunshine940326/drag 在写我们后台的管理程序中需要有一个拖放的功能,然后我们有一个这样的功能,实现11个固定且大...
git切换分支报错,不管什么标题名字,都报非法字符,所以就不起名字了。
切换分支的时候,报了标题这么个错误,error: ”xxx did not match any file(s) known to git. 看见不能切换分支,我首先 git status 查看了一下当前状态,如下图 然后,就会发现,其实我的这个错误非常明显,就是在我的 beat 分支下有文件修改,所以切换不了。ok,解决方法: 1. 如果修改的这些文件没什么用,完全可以删除。(我这儿的...
Oracle分析函数之LEAD和LAG实际应用
Oracle分析函数之LEAD和LAG实际应用 在前几天的工作中按照客户的需求,需要对客户信息进行数据分析,即某人存在多个状态的账号,将客户信息账号状态分析出结果,和客户确认汇报,根据保留规则,保留唯一账号,以保证程序可用性。起初,根据聚合函数进行查询分析,需要写一大串的SQL,即不美观又复杂,很容易产生错误。后续想到Oracle分析函数中的lead和lag,SQL简洁了很多且容易产生报告数据。 ...
小知识积累(不断更新中)
判断变量的类型(数组,对象) tyopof:不推荐,因为无法区别数组与对象,数组是对象的子对象 instanceof:可以使用 还可以用来判断是否属于函数 Object.prototype.toString.call():最兼容,推荐使用 定时器的执行顺序或机制 js是单线程的,浏览器遇到setTimeout或者setInterval会把定时器推入浏览器的待执行事件队列里面但是不执行,先执行完当前...
ROS自学实践(6):ROS进行激光SLAM建图——gmapping
本节主要记录运行ROS自带的SLAM建模包gmapping方法,为后续理解这些代码,建立自己的SLAM算法打下基础。 基于粒子滤波算法 二维栅格地图 需要里程计信息 1.通过命令行安装gmapping包 2.配置gmapping节点 3.运行gazebo模型及gmapping节点 4.打开rviz 添加laserscan、map、robotmodel模型 5.移动小车,建立模型 6.保存当前地图 ...
