在编译自己写的头文件的时候,有时候会遇到找不到ros头文件,ros消息的问题,大致如下:
CMakeFiles/tom_odometry.dir/src/tom_odometry.cpp.o: In function `main':
tom_odometry.cpp:(.text+0x72): undefined reference to `ros::init(int&, char**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
tom_odometry.cpp:(.text+0x104): undefined reference to `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&)'
tom_odometry.cpp:(.text+0x1b9): undefined reference to `ros::Rate::Rate(double)'
tom_odometry.cpp:(.text+0x1ca): undefined reference to `ros::ok()'
tom_odometry.cpp:(.text+0x250): undefined reference to `ros::Time::now()'
tom_odometry.cpp:(.text+0x640): undefined reference to `ros::Rate::sleep()'
tom_odometry.cpp:(.text+0x6b0): undefined reference to `ros::Publisher::~Publisher()'
tom_odometry.cpp:(.text+0x6bf): undefined reference to `ros::NodeHandle::~NodeHandle()'
tom_odometry.cpp:(.text+0x7c3): undefined reference to `ros::Publisher::~Publisher()'
tom_odometry.cpp:(.text+0x7d2): undefined reference to `ros::NodeHandle::~NodeHandle()'
CMakeFiles/tom_odometry.dir/src/tom_odometry.cpp.o: In function `ros::Publisher ros::NodeHandle::advertise<visualization_msgs::Marker_<std::allocator<void> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, bool)':
tom_odometry.cpp:(.text._ZN3ros10NodeHandle9advertiseIN18visualization_msgs7Marker_ISaIvEEEEENS_9PublisherERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjb[_ZN3ros10NodeHandle9advertiseIN18visualization_msgs7Marker_ISaIvEEEEENS_9PublisherERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjb]+0xdd): undefined reference to `ros::NodeHandle::advertise(ros::AdvertiseOptions&)'
CMakeFiles/tom_odometry.dir/src/tom_odometry.cpp.o: In function `void ros::Publisher::publish<visualization_msgs::Marker_<std::allocator<void> > >(visualization_msgs::Marker_<std::allocator<void> > const&) const':
tom_odometry.cpp:(.text._ZNK3ros9Publisher7publishIN18visualization_msgs7Marker_ISaIvEEEEEvRKT_[_ZNK3ros9Publisher7publishIN18visualization_msgs7Marker_ISaIvEEEEEvRKT_]+0x47): undefined reference to `ros::console::g_initialized'
遇到这类问题基本都是CMakeLists或者package.xml文件中缺少包含对应的库或者依赖项,主要检查以下几点:
CmakeLists:
- find_package()
- catkin_package()
- include_directories()
- add_executable()
- target_link_libraries() -> 这点容易忽略
package.xml
- <build_depend>xxx</build_depend>
- <build_export_depend>xxx</build_export_depend>
- <exec_depend>xxx</exec_depend>