ROS自带OpenCV和本地OpenCV版本冲突问题解决

news/2025/2/22 8:11:31

1、报错信息

首先catkin_make编译功能包没有任何问题,100%生成目标文件,但是报了警告:库文件libmyslam.so需要的是libopencv_core.so.3.4,可能会与libopencv_core.so.3.2冲突。根据工程经验,警告不用管,直接运行完事。

[100%] Linking CXX executable /home/dzh/Demo/VO/devel/lib/ros_vo/run_vo
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by /home/dzh/Demo/VO/src/ros_vo/lib/libmyslam.so, may conflict with libopencv_core.so.3.2
/usr/bin/ld: warning: libopencv_imgcodecs.so.3.4, needed by /usr/local/lib/libopencv_highgui.so.3.4.5, may conflict with libopencv_imgcodecs.so.3.2
/usr/bin/ld: warning: libopencv_imgproc.so.3.4, needed by /usr/local/lib/libopencv_highgui.so.3.4.5, may conflict with libopencv_imgproc.so.3.2
[100%] Built target run_vo

roscore、rosrun之后出现核心已转储的报错。查找报错分析是cv_bridge默认调用的是ros自带的OpenCV版本3.2.0,我本地安装的是OpenCV3.4.5,在功能包下的CMakeLists.txt中找的package也是3.4.5,所以导致cv_bridge报错。

OpenCV Error: Bad argument (Unknown interpolation method) in resize, 
file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/imgwarp.cpp, line 3367
terminate called after throwing an instance of 'cv::Exception'
what():  /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/imgwarp.cpp:3367: 
error: (-5) Unknown interpolation method in function resize
已放弃 (核心已转储)

2、解决方法

1、首先,需要下载cv_bridge工程,只需要其中的cv_bridge文件夹。

在这里插入图片描述2、放到你的工程src目录下,它就相当于一个功能包。

修改cv_bridge/CMakeLists.txt文件中工程的名称:

project(cv_bridge)   改为   project(cv_bridge_1) 

修改cv_bridge/package.xml中的包名称:

 <name>cv_bridge</name>  改为  <name>cv_bridge_1</name>

修改cv_bridge/CMakeLists.txt文件中需要的OpenCV版本,改成你本地的版本:

find_package(OpenCV 3.4.5 REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

3、然后在你的工程根目录/src下进行catkin_make编译功能包。

在这里插入图片描述
4、在devel/lib目录下会生成libcv_bridge_1.so文件,这就是我们需要的库文件,它现在用的不再是ros自带的OpenCV了。

在这里插入图片描述
我们在自己的功能包下新建lib目录,放入上面这个libcv_bridge_1.so共享库,然后在include中放入cv_bridge的头文件。

在这里插入图片描述
5、开始重中之重——修改自己的功能包下的CMakeLists.txt。

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  sensor_msgs
  image_transport 
  message_generation
)
  • 添加头文件路径include
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)
  • 包含目录lib
link_directories(
  lib
  ${catkin_LIB_DIRS}
)
target_link_libraries(run_vo
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
  libcv_bridge_1.so
)

6、重新catkin_make,然后rosrun即可成功运行,再无核心转储的报错。

在这里插入图片描述

探索了1小时,试了多种方法,最后总结出自己的一套方法。


http://www.niftyadmin.cn/n/699721.html

相关文章

javaweb学习2

p标签使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!--p标签定义段落 p元素自动在其前后创建一段空白--> hello&#xff0c;world &l…

Flink流批一体计算(9):Flink Python

目录 使用Python依赖 使用自定义的Python虚拟环境 方式一&#xff1a;在集群中的某个节点创建Python虚拟环境 方式二&#xff1a;在本地开发机创建Python虚拟环境 使用JAR包 使用数据文件 使用Python依赖 通过以下场景为您介绍如何使用Python依赖&#xff1a; 使用自定义…

「深度学习之优化算法」(七)杜鹃搜索算法

1. 杜鹃搜索算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 杜鹃搜索算法(Cuckoo search,CS)是一种模仿杜鹃鸟寻窝产卵活动的群集智能优化算法。杜鹃搜索算法的流程简单,有较强的跳出局部最优能力,但由于算法中列维飞行实现较复杂且算法提出时间不长,还有很…

Spring6快速入门

Spring6快速入门 各工具版本要求&#xff1a; JDK:Java17 Maven:3.6 Spring:6.0.9 简介 Spring是一个控制反转(IOC)&#xff0c;面向切面(AOP)编程的轻量级框架。 2002年&#xff0c;Rod Johnson首次推出Spring框架的雏形&#xff0c;interface21(https://interface21.io/) 200…

我的创作纪念日(一周年)

机缘 作为一位互联网安全专业的大一学生&#xff0c;我始终怀抱着提升自身技术能力、保护网络安全、推动互联网世界发展的初心。 通过实战项目的经验分享&#xff0c;我收获颇多。参与团队网络安全演练与攻防对抗&#xff0c;使我学会了应对不同类型攻击与漏洞&#xff0c;提…

人工智能:揭示未来科技所带来的革命性变革

目录 引言&#xff1a; 一、人工智能的定义与发展历程&#xff1a; 二、人工智能的应用领域&#xff1a; 三、人工智能对未来的影响&#xff1a; 结论&#xff1a; 引言&#xff1a; 在当今科技快速发展的时代&#xff0c;人工智能&#xff08;Artificial Intelligence&am…

哪个爬虫库用的最多?

在Python中&#xff0c;最常用的爬虫库是requests和BeautifulSoup。requests库用于发送HTTP请求和处理响应&#xff0c;而BeautifulSoup库用于解析HTML文档。这两个库通常结合使用&#xff0c;用于爬取网页内容并提取所需的数据。其他常用的爬虫库还包括Scrapy、Selenium等。 常…

设计模式第18讲——中介者模式(Mediator)

目录 一、什么是中介者模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 抽象中介者&#xff08;Mediator&#xff09;——LogisticsCenter 5.2 抽象同事类&#xff08;Colleague&#xff09;——Participant 5…