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 库。
下载对应版本的 cv_bridge 包
git clone https://github.com/ros-perception/vision_opencv.git -b ${ROS_DISTRO}
进入 cv_bridge 目录,修改
CMakeLists.txt
文件中的 OpenCV 版本号编译的时候指定安装路径 ( 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
。