最近在学习slam14讲这本书,第5讲中需要下载opencv3.1,(这个是一个ubuntu20.04下载opecv3.1的博客,不过后来我报了一些依赖的错,懒的解决了,就没有用了)在下载opencv3.1时,发现太麻烦了。。。还要自己下载ippiv之类的压缩包放在对应文件下、更改.cmake文件什么的,make之后又报了很多错,懒得修了。。于是选择下载opencv3.4
因为之前使用别人电脑配置环境的时候,就遇到opencv3下载出现问题,更改一大堆软链接才搞定,所以现在记录以下过程:
我看了很多博客,其实我都不知道哪个才是合适的?
这个是一个知乎上写的:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev libgphoto2-dev libopenblas-base libopenblas-dev doxygen openjdk-8-jdk pylint libvtk6-dev
sudo apt-get install pkg-config
sudo apt-get install libvtk5-dev #这个要注意
1.安装libjasper-dev报错:
借鉴了这篇博客:Ubuntu18.04下安装OpenCv依赖包libjasper-dev无法安装的问题,libjasper1是libjasper-dev的依赖包
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
2.不过最关键的库libvtk5-dev :
sudo apt-get install libvtk5-dev
安装时如果找不到这个库,更换中科大源试试,方法如下:
(1)首先备份一下 /etc/apt/sources.list,先跳到 /etc/apt/ 路径下,然后
cp sources.list sources.list.bak
(2)然后更改list的内容
sudo gedit /etc/apt/sources.list
(3)输入(如果想要更换其他源,例如清华源、中科大源等等,这个博客整理好了)
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
## Pre-released source, not recommended.
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
(4)然后
sudo apt-get update
(5)再执行
sudo apt-get install libvtk5-dev
应该就可以安装上了,其实我换完源之后仍然找不到,于是安装的
sudo apt-get install libvtk6-dev
这是opencv3.4的zip的github下载地址
这是contrib 3.4的下载地址
unzip opencv-3.4.zip
unzip opencv_contrib-3.4.zip
cp -r opencv_contrib-3.4 opencv-3.4
cmake -D ENABLE_CXX11=YES -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_ENABLE_NONFREE=YES -D OPENCV_EXTRA_MODULES_PATH=/home/wangchen/下载/opencv-3.4/opencv_contrib-3.4/modules/ ..
这部分:
OPENCV_EXTRA_MODULES_PATH=/home/wangchen/下载/opencv-3.4/opencv_contrib-3.4/modules/ 更改成实际地址
make -j4
sudo make install
如果make成功,则省略下面这段话;在make后,如果你报错下面这些:
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFGetFieldDefaulted@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFNumberOfDirectories@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFOpen@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFDefaultStripSize@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFReadRGBAImage@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `TIFFReadTile@LIBTIFF_4.0'
(1)重装libtiff4-dev
如果选择这个解决方法,即重装libtiff4-dev的话,ROS会被删除,不建议这样粗暴使用,而且我这样用了,也没解决问题
sudo apt-get autoremove libtiff5-dev
sudo apt-get install libtiff5-dev
(2)删除库
我照着这篇博客,首先
locate libtiff.so
第一次使用 locate 报错:
find: ‘/run/user/1000/gvfs’: Permission denied解决办法
使用下面这两个命令之后就可以locate了
umount /run/user/1000/gvfs
rm -rf /run/user/1000/gvfs
我直接删除 /usr/local/lib/libtiff* 的文件,再次创建build文件、cmake、make就好了
sudo rm -rf /usr/local/lib/libtiff* # 删除自己安装的所有libtiff库
(3)更改软链接
这个之前做过,但是忘记了用谁指向谁了。
报错的提示:a对b未定义的引用,就是b有问题,需要把b指向一个能用的源
软链接格式:
ln -s c b
意思为:c <-- b,其中c为源,b相当于一个快捷方式
1、修改/etc/ld.so.conf文件
sudo gedit /etc/ld.so.conf
在下面加入
include /usr/local/lib
使其生效
sudo ldconfig
2、修改bash.bashrc文件
sudo gedit /etc/bash.bashrc
在末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
然后source使得bash生效:
source /etc/bash.bashrc
pkg-config opencv --modversion
1
2
3
我发现重新安装ROS的时候,会自动卸载我的 libvtk6-dev ,不知道怎么回事,我发现ROS似乎和 libvtk6-dev 互相冲突?
安装 ROS,会自动卸载libvtk6-dev;
安装 libvtk6-dev ,会自动卸载ROS的依赖包,导致ROS不能用。
但是不想管,还是直接下载:参考这个博客,每次我都用这个下载ROS,
查询ip的网站这个可以,把搜出来的几个网址可以全部放到/etc/hosts文档下面,然后再sudo rosdep init就好了。
这个安装比较简单。