1. 问题

ROS 版本中通用安装方式下的 cv_bridge 所编译采用的 OpenCV 版本是自带默认的。这个时候与我们本地安装的 OpenCV 版本可能存在不符。在这种情况下,有一定的概率在运行代码时候产生莫名其妙的 bug ,不但难以定位问题,而且通常并非是代码问题。通常在编译过程中会出现类似如下 warning ,这个时候就需要特别注意:

/usr/bin/ld: warning: libopencv_imgcodecs.so.4.5d, needed by /opt/ros/humble/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.408
/usr/bin/ld: warning: libopencv_imgproc.so.4.5d, needed by /opt/ros/humble/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.408
/usr/bin/ld: warning: libopencv_core.so.4.5d, needed by /opt/ros/humble/lib/libcv_bridge.so, may conflict with libopencv_core.so.408
  • 实例中 ROS 安装时候默认的 OpenCV 版本是 4.5 , 而我本地安装的版本是 4.8 ,而报错出现的 4.08 的原因未知。

2. 解决方案

单独重新安装 cv_bridge 库。

  1. 下载对应版本的 cv_bridge 包

    git clone https://github.com/ros-perception/vision_opencv.git -b ${ROS_DISTRO}
    
  2. 进入 cv_bridge 目录,修改 CMakeLists.txt 文件中的 OpenCV 版本号

  3. 编译的时候指定安装路径 ( ROS 安装的目录下:/opt/ros/${ROS_DISTRO} )

    cd vision_opencv/cv_bridge
    mkdir build && cd build
    cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/${ROS_DISTRO} ..
    sudo make install
    

3. Linux 删除 cmake 源码编译安装的库

找到 sudo make install 之后产生的 install_manifest.txt 文件,里面有安装的所有东西的路径,删除他们即可。

参考命令:cat install_manifest.txt | sudo xargs rm 或者 sudo xargs rm < install_manifest.txt