Ubuntu20.04安装opencv4

描述

Ubuntu20.04安装opencv4的步骤
由于部分步骤是已经OK的,所以只是记录在这里,并将一些问题的解决方案记录在这里,以后会更新完整干净的步骤

步骤

  1. 下载opencv4.5.5 及 opencv_contrib4.5.5

  2. 我下载到的位置是Downloads,可以在Downloads目录下完成解压

    cd Downloads
    
  3. 编译opencv,并将opencv_contrib设置为外部包同时进行编译(在命令中你会看到与opencv4.5.5同级目录下opencv_contrib4.5.5的路径)

    mkdir release
    cd release
    cmake -D BUILD_TIFF=ON -D WITH_CUDA=OFF -D ENABLE_AVX=OFF -D WITH_OPENGL=OFF -D WITH_OPENCL=OFF -D WITH_IPP=OFF -D WITH_TBB=ON -D BUILD_TBB=ON -D WITH_EIGEN=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.4/modules ../../opencv-4.5.4
    sudo make -j12
    sudo make install
    

    在make编译步骤时总会出现一些问题,我将解决办法写在最后

  4. 将OpenCV的库添加到路径

    首先将OpenCV的库添加到路径,从而可以让系统找到

    sudo gedit /etc/ld.so.conf.d/opencv.conf 
    

    打开后在文件(可能是空白的文件)中添加

    /usr/local/lib
    
  5. 生效配置文件

    使刚才的配置路径生效:

    sudo ldconfig 
    
  6. 配置bash

    sudo gedit /etc/bash.bashrc 
    

    在打开的文件末尾添加:

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
    export PKG_CONFIG_PATH
    
  7. 保存,执行如下命令使得配置生效:

    source /etc/bash.bashrc
    
  8. 更新命令

    sudo updatedb
    

问题一:编译时出错

在执行sudo make -j12时,会出现错误。问题如下:

/usr/bin/ld: /usr/local/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:638: recipe for target 'lib/libopencv_highgui.so.2.4.13' failed
make[2]: *** [lib/libopencv_highgui.so.2.4.13] Error 1
CMakeFiles/Makefile2:1934: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

报错部分可以去参考这篇文章,我没真记录,不过这篇文章的报错和我基本是一模一样的https://blog.csdn.net/imv123/article/details/113122133
首先说明:按照很多方法去编译ffmpeg库,并添加什么参数:–enable-shared,并没有解决我的问题

最终我的解决方法也比较粗暴:

按照这篇文章的解释:pencv在编译的时候,用到了libswscale.a、libavcodec.a文件,这两个文件应该是可选的,如果电脑中有这两个文件,说明之前装过ffmpeg或者用ffmpeg相关库的软件,这是在装ffmpeg时安装的,报上述错误可能是因为ffmpeg的libswscale.a、libavcodec.a文件版本和opencv有冲突,opencv在cmake的时候会检测一些本机环境,如果有这两个文件,就会让这两个文件参与到编译当中。
http://t.zoukankan.com/GengMingYan-p-14800319.html

这里我们去关注报错

/usr/local/lib/libavcodec.a(vc1dsp_mmx.o):

我们执行命令去该路径下,确实发现了libswscale.a、libavcodec.a两个文件

cd /usr/local/lib

因此我们对这两个文件作了一下备份,然后删除了两个原文件

sudo cp libswscale.a libswscale.a.bak
sudo cp libavcodec.a libavcodec.a.bak
sudo rm libswscale.a
sudo rm libavcodec.a

接着我们跳回到主步骤,去重新编译opencv

sudo make -j12

在我们进行了如此的解决办法后,是可以编译成功的(对于我,前几次执行仍然报错,不知道为什么执行了好几次,才100%编译成功。这一过程中,我没有做其他操作,故且睁一只眼闭一支眼了)

不要忘了,最后将原文件还原回去,毕竟我们只是想忽略链接这两个库,并不是要真正删除他们

sudo cp libswscale.a.bak libswscale.a
sudo cp libavcodec.a.bak libavcodec.a
sudo rm libswscale.a.bak
sudo rm libavcodec.a.bak

总结

未完待续,因为我肯定迟早会再装很多次的

你可能感兴趣的:(功能安装,opencv,bash,人工智能)