ros kinetic 消息发布器和接收器(cpp) 教程中对 ros::init 等未定义的引用问题解决

ros::init 等未定义的引用问题解决

最近在做ROS相关的工作,主要参考了官方的ROS教程,这份官方教程有中文教程,在按照官方教程一步步运行时,当运行到第11小节:编写简单的消息发布器和订阅器 (C++),出现了如下的错误,这里只列出了错误的一小部分代码 :

CMakeFiles/listener.dir/src/listener.cpp.o:在函数‘chatterCallback(boost::shared_ptr > const> const&)’中: listener.cpp:(.text+0x1f):对‘ros::console::g_initialized’未定义的引用

通过查找网上的博客,发现虽然有类似的问题,但是参考之后,问题没有解决,之后对创建的程序包下的CMakeLists.txt进行检查,最后定位到了问题,主要的问题是CMakeList.txt中的代码位置不对。ros kinetic 消息发布器和接收器(cpp) 教程中对 ros::init 等未定义的引用问题解决_第1张图片
按照官网的教程,直接傻乎乎的把这几行代码放在CMakeLists.txt的尾部,最后发现,在CMakeLists.txt文件中,这些语句在文件中都是存在的,我们只要打开CMakeLists.txt,之后查找到这些语句,把CMakeLists.txt中对应的语句反注释掉,并把相应的cpp文件名称和结点名称修改为自己的名称,之后就可以啦。
在修改完成这些之后,发现运行catkin_make的时候,还是会出现错误,最后参考:https://answers.ros.org/question/253557/undefined-reference-to-rosinit-with-beginner_tutorials/
发现可能时自己的gcc和g++版本出现问题,最后把自己的gcc和g++版本更新到5.4,(注意,要保证gcc和g++版本保持一致)最后这个问题解决。

你可能感兴趣的:(ros,ros::init未定义的引用,undefined,reference,ros::init)