ROS自带的OpenCV与自己安装的OpenCV发生冲突:warning: libopencv*.so.*,needed by *,may conflict with libopencv*.so.*
本文记录了在编译ROS包的过程中出现的ROS自带的OpenCV与自己编译的OpenCV发生冲突时的解决方法
·
由于需要,我们往往会编译所需版本OpenCV库,但在使用ROS的时候,会默认使用其自带的OpenCV库,如melodic版本自带的库版本为3.2.0,noetic则为4.2.0。
此时如果需要使用另外版本的OpenCV,可能会发生冲突,并会引发严重问题,常见的问题为程序崩溃。当编译完工作空间后,出现诸如这样的报错,则可以确定发生了OpenCV版本冲突的问题:
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.410
解决的方法很简单,就是将ROS自带的OpenCV库屏蔽,不让其参与编译。找到使用了OpenCV库的ROS包,修改CMakeLists.txt文件中的内容,在target_link_libraries前(本质上是在使用${catkin_LIBRARIES}之前),添加如下两行代码:
file(GLOB_RECURSE ROS_OPENCV "/usr/lib/x86_64-linux-gnu/libopencv*")
list(REMOVE_ITEM catkin_LIBRARIES ${ROS_OPENCV})
注意:作者使用的为x86的机器则为/usr/lib/x86-64-linux-gnu/libopencv*,若是arm架构则为/usr/lib/aarch64-linux-gnu/libopencv*。若不确定机器的架构,可使用uname -m命令进行查看。
若系统没有额外安装OpenCV库,不要使用以上两行代码,会使ROS自带的OpenCV库失去作用。
更多推荐


所有评论(0)