Ubuntu下编译安装opencv,以及软链接、so版本号的处理

写在最前:Ubuntu下编译安装opencv还是比较简单的,最近要发布依赖opencv的程序,突然发现编译安装的opencv有两层软链接:
libopencv_world.so.4.4 -> libopencv_world.so.4.4.0
libopencv_world.so -> libopencv_world.so.4.4
结果依赖opencv的程序显示依赖的库为libopencv_world.so.4.4,但实际的so应该是libopencv_world.so.4.4.0
本文记录一下解决的两种方法:

  1. 将两层软链接改为一层软链接
  2. 去掉so后边的版本号信息

1. 编译安装opencv(正常流程)

1.1 安装依赖环境

  1. 安装cmake
sudo apt-get install cmake
  1. 安装其他依赖项
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

1.2 下载opencv源码

有两个下载地址:

  1. opencv官方网址:https://opencv.org/releases/
  2. github:https://github.com/opencv/opencv/releases

选择下载对应版本的源码即可

1.3 编译安装

  1. 解压下载的源码包,并进入该文件夹,4.4.0版本解压后如下:
  1. 新建脚本文件generate_opencv_world.sh,用于编译(也可以在控制台直接输入命令,建议养成写脚本的习惯)
rm -rf build_world
mkdir build_world && cd build_world

cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_opencv_world=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..

make -j$(nproc)

make install

这里cmake参数写的很少,更多设置这里不做详述
BUILD_opencv_world=ON代表只生成一个so,如果想生成各模块单独的so,设为OFF即可。

  1. 运行脚本
sudo sh ./generate_opencv_world.sh
  1. 结果

完成后会生成三个文件:

  • libopencv_world.so.4.4.0
  • libopencv_world.so.4.4
  • libopencv_world.so

其中只有 libopencv_world.so.4.4.0 是生成的so文件,其他两个是软链接
但在实际使用的过程中,生成的可执行文件依赖的是 libopencv_world.so.4.4,发布程序比较麻烦

2. 两层软链接变为一层软链接

需要改的地方很少,只需找到【opencv-4.4.0】-【cmake】-【OpenCVModule.cmake】文件,找到其中如下代码:

  # For dynamic link numbering conventions
  if(NOT ANDROID)
    # Android SDK build scripts can include only .so files into final .apk
    # As result we should not set version properties for Android
    set_target_properties(${the_module} PROPERTIES
      VERSION ${OPENCV_LIBVERSION}
      SOVERSION ${OPENCV_SOVERSION}
    )
  endif()

将其中的SOVERSION注释掉即可:

  if(NOT ANDROID)
    # Android SDK build scripts can include only .so files into final .apk
    # As result we should not set version properties for Android
    set_target_properties(${the_module} PROPERTIES
      VERSION ${OPENCV_LIBVERSION}
      # SOVERSION ${OPENCV_SOVERSION}
    )
  endif()

下边对其中几个关键字做出解释:

  • set_target_properties
    • 设置目标属性
  • VERSION
    • 目标版本号
  • SOVERSION
    • 目标版本号

对于VERSION和SOVERSION,官方的解释如下:

For shared libraries VERSION and SOVERSION can be used to specify the build version and API version respectively. When building or installing appropriate symlinks are created if the platform supports symlinks and the linker supports so-names. If only one of both is specified the missing is assumed to have the same version number. For executables VERSION can be used to specify the build version. When building or installing appropriate symlinks are created if the platform supports symlinks.
即VERSION和SOVERSION可以指定生成的版本号及软链接的版本号

3. 去掉so后边的版本号

如果不需要在so中添加版本号信息,则可以直接去掉,直接输出 libopencv_world.so
去掉版本号的方法很简单,直接把这个属性的设置注释掉就好:

  # # For dynamic link numbering conventions
  # if(NOT ANDROID)
  #   # Android SDK build scripts can include only .so files into final .apk
  #   # As result we should not set version properties for Android
  #   set_target_properties(${the_module} PROPERTIES
  #     VERSION ${OPENCV_LIBVERSION}
  #     SOVERSION ${OPENCV_SOVERSION}
  #   )
  # endif()
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在 Ubuntu 20.04 系统中编译安装 OpenCV-Python 的步骤: 1. 安装依赖项 ```bash sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev ``` 2. 克隆 OpenCV 仓库 ```bash git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.5.2 ``` 3. 克隆 OpenCV-contrib 仓库(可选) ```bash cd .. git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 4.5.2 ``` 4. 编译 OpenCV ```bash cd ../opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \ -D PYTHON3_EXECUTABLE=/usr/bin/python3 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.8 \ -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ -D BUILD_opencv_python3=YES \ -D BUILD_opencv_python2=NO \ -D BUILD_EXAMPLES=NO \ -D BUILD_TESTS=NO \ -D BUILD_PERF_TESTS=NO .. make -j8 sudo make install sudo ldconfig ``` 其中,`-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules` 参数是为了编译 OpenCV-contrib 模块,如果不需要可以省略。 5. 测试 OpenCV-Python ```bash python3 >>> import cv2 >>> cv2.__version__ ``` 如果输出的版本号是 4.5.2,则说明安装成功。 以上是在 Ubuntu 20.04 系统中编译安装 OpenCV-Python 的步骤,希望能帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值