ArchLinux上编译OpenCV3.4.0和4.2.0时的坑

前言

Python项目中,嵌入了C++的程序,这个程序主要用OpenCV包。
开发环境不统一,导致环境部署是遇到很多坑,统一开发环境很重要。环境部署在Arch Linux上,本身对Arch Linux操作不熟悉,特此记录。下面将分别介绍编译OpenCV3.4和4.2版本的过程。

OpenCv 4.2

一、资源

OpenCV编译主要需要OpenCV和OpenCV_contrib文件,下载来源参考以下链接:
OpenCV:

  • github
  • OpenCV官网
  • 国内百度云(这个博主良心呀)

OpenCV_contrib(OpenCV没有吧该包放到官网)

  • github
  • 国内百度云(这博主也要点赞)

二、 安装过程

0.依赖环境
安装之前先去官网看下依赖环境:

  • GCC 4.4.x or later
  • CMake 2.8.7 or higher
  • Git
  • GTK+2.x or higher, including headers (libgtk2.0-dev)
  • pkg-config
  • Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
  • ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
  • [optional] libtbb2 libtbb-dev
  • [optional] libdc1394 2.x
  • [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
  • [optional] CUDA Toolkit 6.5 or higher
    ArchLinux上编译OpenCV3.4.0和4.2.0时的坑_第1张图片
    这里要记得安装,不然后面问题多多哦!!!
    archLinux 安装方式用pacman,具体教程参考这里 ,或者下载AUR,手动makepkg安装,可以参考Arch的wiki
    ArchLinux上编译OpenCV3.4.0和4.2.0时的坑_第2张图片
    1.下载并解压
下载
wget https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
wget https://github.com/opencv/opencv/archive/4.2.0.zip
## 解压
mkdir OpenCV-4.2  
unzip -d OpenCV-4.2  opencv-4.2.0.zip    #  将OpenCV-4.2.0.zip解压到指定目录
unzip -d OpenCV-4.2 opencv_contrib-4.2.0.zip  

unzip用法

2 新建build目录,并cmake

cd   OpenCV-4.2/opencv-4.2.0
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE\Debug \
-D CMAKE_INSTALL_PREFIX=~/OpenCV-4.2 \  ##指定编译好后安装的目录
-D OPENCV_EXTRA_MODULES_PATH=~OpenCV-4.2/opencv_contrib-4.2.0/modules \  #OpenCV_contrib 目录
-D OPENCV_GENERATE_PKGCONFIG=ON \  ## 4.0版本默认生产opencv.pc了,需要指定让他生成
-D BUILD_opencv_python3=TRUE \  ## 基于Python3编译
-D BUILD_opencv_python2=OFF \  ## Python2没用了,我就off掉了
-D PYTHON3_EXECUTABLE=/shared/CS/anaconda2/envs/genty/bin/python3.6 \  ## 这是Python3运行目录
-D PYTHON3_LIBRARY=/shared/CS/anaconda2/envs/genty/lib/libpython3.6m.so \  ## Python3 源文件
-D INSTALL_PYTHON_EXAMPLES=OFF \  ## Python、c的例子可生成可不生成
-D INSTALL_C_EXAMPLES=OFF \
-D WITH_LIBV4L=ON \
-D WITH_V4L=OFF \
-D BUILD_EXAMPLES=OFF ..  ## ..表示上一级目录,这个不用忘了

cmake编写跨平台(cross-platform)的构建规则,通过这些规则来调用各个平台的编译器、链接器,生成各个目标(静态库,静态库,或者可执行),具体参考这里

  1. make 和make install
make 
make install   ## 如何你想把opencv安装到系统中用 sudo make  install
ldconfig   ## 更新路径链接

三、报错

  1. - IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz -- Try 1 failed CMake Warning at cmake/OpenCVDownload.cmake:202 (message):

解决:
下载超时,手动下载,在修改配置。
参考: https://www.jianshu.com/p/3c2fc0da7398

  1. .xfeatures2d/vgg: Download: vgg_generated_48.i -- Try 1 failed

解决:
与问题2类似,
下载链接:https://github.com/cbalint13/opencv-dlco/tree/master/workspace/opencv
问题解决参考链接: https://github.com/opencv/opencv_contrib/issues/967

  1. data: Download: face_landmark_model.dat -- Try 1 failed

解决:
与问题2类似
参考链接:https://blog.csdn.net/CSDN330/article/details/86747867

  1. `Build output check failed:
    Regex: ‘command line option .* is valid for .* but not for C++’

    Output line: ‘cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++’
    Compilation failed:
    source file: ‘/home/dengqk/opencv/opencv-4.2.0/build/CMakeFiles/CMakeTmp/src.cxx’

    check option: ’ -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wstrict-prototypes’`

解决:
添加: -D ENABLE_CXX11=ON(待验证)
参考链接:https://github.com/opencv/opencv/issues/9493

  1. /home/dengqk/opencv/opencv-4.2.0/build/CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10: fatal error: sys/videoio.h: No such file or directory 1 | #include

解决:
https://stackoverflow.com/questions/45582565/opencv-cmake-error-no-such-file-or-directory-on-ubuntu
安装libv4l-dev(待验证)
参考链接: https://www.archlinux.org/packages/extra/x86_64/v4l-utils/

  1. no opencv.pc

解决:
参考链接:https://docs.opencv.org/3.4.0/d7/d9f/tutorial_linux_install.html

OpenCV 3.4.0

OpenCV 3.4.0安装跟4.2.0基本差不多,只是遇到的问题有些不一样,在此记录

问题

  1. modules/viz/src/clouds.cpp:80:13: error: ‘class vtkPolyDataMapper’ has no member named ‘Immedi

解决:
VTK版本太高了
参考:https://blog.csdn.net/ljl1015ljl/article/details/102363139

  1. GNN版本高于 6
    解决:
    添加: -D WITH_CUDA=OFF ## 关闭cuda关联

暂时记录这些后面遇到继续添加 2020.4.1

更新 2020.4.2:
Arch Wiki真是个好东西,在arch 上安装的问题可以到官网 bugs栏目找。

后续会在vmware上安装Arch Linux。

你可能感兴趣的:(工具,运维)