ROS学习笔记--问题记录--ros::init未定义的引用


catkin_make编译,报错如下:

 1 CMakeFiles/test_param_node.dir/src/test_param_node.cpp.o:在函数‘main’中:
 2 test_param_node.cpp:(.text+0x70):对‘ros::init(int&, char**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)’未定义的引用
 3 test_param_node.cpp:(.text+0xcc):对‘ros::NodeHandle::NodeHandle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::mapchar, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::lesschar, std::char_traits<char>, std::allocator<char> > >, std::allocatorchar, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)’未定义的引用
 4 test_param_node.cpp:(.text+0x246):对‘ros::NodeHandle::NodeHandle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::mapchar, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::lesschar, std::char_traits<char>, std::allocator<char> > >, std::allocatorchar, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)’未定义的引用
 5 test_param_node.cpp:(.text+0x36c):对‘ros::NodeHandle::~NodeHandle()’未定义的引用
 6 test_param_node.cpp:(.text+0x399):对‘ros::NodeHandle::~NodeHandle()’未定义的引用
 7 test_param_node.cpp:(.text+0x4f2):对‘ros::NodeHandle::~NodeHandle()’未定义的引用
 8 test_param_node.cpp:(.text+0x524):对‘ros::NodeHandle::~NodeHandle()’未定义的引用
 9 CMakeFiles/test_param_node.dir/src/test_param_node.cpp.o:在函数‘bool ros::NodeHandle::paramchar, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const’中:
10 test_param_node.cpp:(.text._ZNK3ros10NodeHandle5paramINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKS7_RT_RKSA_[_ZNK3ros10NodeHandle5paramINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKS7_RT_RKSA_]+0x27):对‘ros::NodeHandle::hasParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const’未定义的引用
11 test_param_node.cpp:(.text._ZNK3ros10NodeHandle5paramINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKS7_RT_RKSA_[_ZNK3ros10NodeHandle5paramINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKS7_RT_RKSA_]+0x42):对‘ros::NodeHandle::getParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) const’未定义的引用
12 collect2: error: ld returned 1 exit status
13 test_param/CMakeFiles/test_param_node.dir/build.make:86: recipe for target '/home/xxx/catkin_test/devel/lib/test_param/test_param_node' failed
14 make[2]: *** [/home/xxx/catkin_test/devel/lib/test_param/test_param_node] Error 1
15 CMakeFiles/Makefile2:482: recipe for target 'test_param/CMakeFiles/test_param_node.dir/all' failed
16 make[1]: *** [test_param/CMakeFiles/test_param_node.dir/all] Error 2
17 Makefile:143: recipe for target 'all' failed
18 make: *** [all] Error 2

问题原因:

通过https://answers.ros.org/question/63656/how-to-solve-undefined-reference-to-rosinit-on-groovy/

可知,问题在于没有链接到ros库

解决方式:

将默认CMakeLists.txt中的target_link_libraries()部分解除注释

target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
)

重新编译,问题解决