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::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<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&)’未定义的引用 4 test_param_node.cpp:(.text+0x246):对‘ros::NodeHandle::NodeHandle(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<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&)’未定义的引用 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::param<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&, 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}
)
重新编译,问题解决