ROS中CMAKE常见错误警告汇总

 这篇文章主要是汇总我在编译ROS文件中常遇到的警告和错误,并且会不定时更新。

  1. -Wreorder 警告

这种警告主要是在定义的时候,或者声明的时候与之前定义的顺序不一致,只需要将其顺序调整为一致的即可。

2. passing 'const xxx ' as 'this' argument discards qualifiers [-fpermissive] 错误

主要是由于错误使用了const标记符,尤其是对于会被修改的变量,使用const使其不会被修改

3. error: no matching function for call to ‘ratslam::LocalViewMatch::on_image(const value_type*, bool, const _width_type&, const _height_type&, cv_bridge::CvImageConstPtr&, OrbVocabulary&, OrbLoopDetector&, DLoopDetector::TemplatedLoopDetector<cv::Mat, DBoW2::FORB>::Parameters&)’
 " ? false : true), image->width, image->height, cv_ptr, voc, detector, params);

这个主要原因是没有找到对应匹配的函数,可能是由于修改了头没顾上尾,需要返回寻找定义,进行一下修改。

4. In file included from /home/edward/catkin_ws/src/ratslam_ros/src/ratslam/local_view_match.cpp:29:0:
/home/edward/catkin_ws/src/ratslam_ros/src/ratslam/local_view_match.h:44:10: fatal error: DUtils.h: 没有那个文件或目录
 #include "DUtils.h"
          ^~~~~~~~~~
compilation terminated.
ratslam_ros/CMakeFiles/ratslam.dir/build.make:110: recipe for target 'ratslam_ros/CMakeFiles/ratslam.dir/src/ratslam/local_view_match.cpp.o' failed
make[2]: *** [ratslam_ros/CMakeFiles/ratslam.dir/src/ratslam/local_view_match.cpp.o] Error 1
CMakeFiles/Makefile2:2877: recipe for target 'ratslam_ros/CMakeFiles/ratslam.dir/all' failed
make[1]: *** [ratslam_ros/CMakeFiles/ratslam.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j1 -l1" failed

 这种问题很奇怪,因为,我在build中进行make的时候并未出现关于include头文件的报错问题,但是在catkin中出现了,而且,在我build的文件夹下也可以寻找到相应的头文件。于是我百思不得其解,一整天在搜索make和catkinmake两个的区别,同时在微信群中向一些大佬请教,寻找答案,通过大佬解答发现其实两个make(即,catkinmake和cmake所调用的make文件其实是同一个cmakelists,只不过一个是常见gnuC下面,一个是ROS环境下的,大佬的意思差不多是这个)。但还是没有解决我这个问题的思路,于是群里有大佬建议直接使用绝对路径的方法在程序中进行修改,但在我看来,这是最愚蠢的办法,实在不行再这么做。于是,我又坚持了一个上午,还是没有任何头绪,尝试了若干种别的解决方案之后,我下定决心重头把原始的cmakelists进行修改(主要原来的实在太乱,两个交叉在一起,很难看懂,容易看懵),我按照另外一种格式重新写了一下cmakelists,终于在千难万险之下,把其中的bug找出来了。

主要原因是缺少了这句话target_include_directories(ratslam_em PUBLIC ${DLib_INCLUDE_DIRS} ${DBoW2_INCLUDE_DIRS})

 最后结果100%编译通过。

这个bug的解决过程并不顺利,但我忽然想起翁恺老师在C语言程序设计课所讲过的一句话:学计算机一定要有一个非常强大的心理状态,什么呢,计算机的所有东西都是人做出来的,别人能想出来的我也一定想得出来,在计算机里头没有任何黑魔法,所有的东西只不过是我现在不知道而已,总有一天我会把它里面的细节搞明白的!

加油!COME ON!

 

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值