回答

收藏

【BPI-M2 Berry试用】安装opencv3.4.0(包含contrib模块)

其他 其他 3552 人阅读 | 0 人回复 | 2018-03-21

本帖最后由 day_day 于 2018-3-22 00:35 编辑

过去半年时间我终于成功编译安装opencv,而在这个过程中,opencv甚至已经从3.2.0一路到3.4.1了。之前因为依赖项问题导致一直无法成功编译。

(一)依赖项问题
依赖项我参考了一下连接,当然里面很多依赖项对我来说并没有用,比如所有跟python有关的……
  1. sudo apt-get install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
  2. sudo apt-get install build-essential cmake git
  3. sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
复制代码

此外,安装过程中还有tbb、gst等库

解决方案:
  1. sudo apt-get install libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev   
复制代码

这是gst的,tbb可自行百度


(二)libpng库解决方案
迷惑我最长时间的是png库,我猜测是香蕉派的镜像做得不好,无论我如何重装png(libpng libpng12 libpng16)都无法解决png库的函数未声明问题:

这时我看到cmake生成出现以下问题:

如果是正常的cmake在install虚线线面只有configure done,这里多出这个意思是可能系统本来就有png库,然后apt又安装了png库,两个库冲突了。我怀疑镜像本身有一个并没有注册在apt里面,而且没用安装在/usr/local下面的png库,因为我如何remove都没办法溢出libpng12、libpng16。总之各种情况很复杂,这一点浪费了大量时间都没用解决,最后只能通过
  1. -DWITH_PNG=OFF \
复制代码


强行关掉png依赖,这就证明在这个编译安装的opencv中无法处理png图片,但这也是没办法的,总不能因为一个坏掉的库就不安装opencv3.4。


(三)系统问题
为了安装opencv3.4,我无数次把系统折腾到废掉,最近一次是因为安装opencv3.4的时候使用了-j4编译,内存溢出,然后整个系统瘫痪,强制重启后ui界面丢失。

系统安装上,最好安装17年11月份那个ubuntu镜像,8月份的镜像在upgrade的时候会出现足以把人逼疯的依赖问题。
由于安装opencv过程中需要安装大量的以来,换国内源也就成为很重要的问题:
建议参考这个帖子:
http://blog.csdn.net/wr132/article/details/56700479
把 /etc/apt/sources.list里面所有的
  1. http://ports.ubuntu.com/
复制代码


换成
  1. http://mirrors.ustc.edu.cn/ubuntu-ports/
复制代码


这个时候就基本没用问题了,sources.list里面最后两行不是port.ubuntu.com的就不用管,留在那。




(四)fPIC库问题
在好不容易解决以上问题之后,出现了一个很大的阻碍:

  1. relocation R_ARM_THM_MOVW_ABS_NC against `__stack_chk_guard' can not be used when making a shared object; recompile with -fPIC
复制代码


根据各大论坛相似问题的解决方法,证明是编译过程没用加入fPIC库。那么opencv的编译安装如何加入fPIC库呢?
直接的答案并没有在搜索引擎中找到过方法,最后只能自己尝试加入了一个带pic字样的编译选项:
  1. ENABLE_PIC
复制代码



结果真的被我撞对了。


(五)动态库与静态库问题
最后成功编译安装后,兴冲冲去看才发现安装的都是.a库,一堆依赖问题!
原来是这个选项的锅:

一定要把他加上


(六)lz库问题
曾经遇到一个很头大的错误,是关于'gzeof'、'gzopen'这些函数未定义的问题。
根据资料显示这些函数都属于lz库的,但lz库肯定是安装了的,那为什么又会没用定义呢?
后来发现是没用把这个选项选上:

如果不选上的话,即使opencv成功编译安装,make代码的时候也会出现上面'gzeof'、'gzopen'这些函数未定义的问题,这时候可以手动在makefile后面加上-lz,但终究是比较麻烦。


(七)建议使用cmake-gui进行配置,cmake脚本的话会很容易出问题的。
最后记得把OPENCV_EXTRA_MODULES_PATH选项加上contrib模块所在路径,记得contrib模块要挂载home目录下,编译所在的环境可以不属于home目录,而在ext4格式的外挂存储器上操作。
cmake-gui重要选项:


(八)配置
最后切记:
sudo gedit /etc/ld.so.conf.d/opencv.conf
末尾加入/usr/local/lib
保存退出sudo ldconfig #使配置生效
具体参考:
http://blog.csdn.net/lanbing510/article/details/41698517

(九)镜像8g的镜像,百度云没有会员,用的是一个不出名的网盘,上传完再分享,如果不想折腾的朋友可以直接使用我的镜像。
https://u17032674.ctfile.com/fs/17032674-241755776

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条