记录ros下opencv和qt结合时发生的问题

本文解决OpenCV与Qt结合时的编译错误,如未定义引用和无效指针realloc()问题,通过调整OpenCV版本解决。同时,解决ROS launch文件中rosparam命令无法正确加载配置文件的难题。

1.编译时对单独一个功能包进行编译,,发生对cvflann,cv::string等的未定义引用

解决方法:在相应功能包的CMakeLists文件中找到“find OpenCV REQUIRED”,在openCV后加上需要的版本号即可,因为有可能在之前的操作中指定了OPENCV默认使用的版本号

2.编译通过后,出现无效指针 realloc(): invalid pointer的问题:编译输出如下

realloc(): invalid pointer: 0xb6268f54 *** 
======= Backtrace: ========= 
/lib/i386-linux-gnu/libc.so.6(+0x767e2)[0xb5d277e2] 
/lib/i386-linux-gnu/libc.so.6(realloc+0x263)[0xb5d2b3e3] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(_ZN9QListData7reallocEi+0x37)[0xb4752567] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(_ZN9QListData6appendEi+0x7c)[0xb475264c] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(_ZN9QListData6appendEv+0x23)[0xb47526d3] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(+0x17f82e)[0xb483282e] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(_Z21qRegisterResourceDataiPKhS0_S0_+0x101)[0xb482f211] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(+0x2a7439)[0xb495a439] 
/usr/lib/i386-linux-gnu/libQt5Core.so.5(+0x52d74)[0xb4705d74] 
/lib/ld-linux.so.2(+0xf216)[0xb7780216] 
/lib/ld-linux.so.2(+0xf2fc)[0xb77802fc] 
/lib/ld-linux.so.2(+0x11df)[0xb77721df] 
======= Memory map: ======== 
08048000-081cb000 r-xp 00000000 08:0c 260629     /home/lcmliao/qttest/v3-build-desktop/v3 
081cb000-081cc000 r--p 00182000 08:0c 260629     /home/lcmliao/qttest/v3-build-desktop/v3 
081cc000-081cd000 rw-p 00183000 08:0c 260629     /home/lcmliao/qttest/v3-build-desktop/v3 
09809000-0982a000 rw-p 00000000 00:00 0          [heap] 
b200c000-b2013000 rw-p 00000000 00:00 0  
..........

(后面还有一长串,我就不复制了)

解决方法:由于我使用的OPENCV是3.3.1版本,当时为了和ros默认的OPENCV版本号统一,结果出现上述问题,通过查阅网上资料尝试重装OPENCV,由于懒得重新下个版本,所以还是装的3.3.1,结果发现还是不行,经师兄提醒,换了2.4.13的版本,结果神奇的事情发生了,就能成功运行了,难道在结合qt的情况下需要OPENCV版本为2.4?有待考证

3.在launch文件中写了 <rosparam command="load" file="$(find map_server)/config/common_config.yaml"/>,map_server是在同级目录下,但是运行launch文件时,报错在/opt/ros/kinetic/share/map_server下找不到文件

解决方法:删除build 和devel文件夹,重新catkin build整个工程,载进行source,重新运行即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值