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}
)
重新編譯,問題解決