ROS2 Humble项目编译报错:undefined reference to `rclcpp::Node::Node(std::string const&, rclcpp::NodeOptions const&)`
ROS2 Humble项目编译报错:undefined reference to
rclcpp::Node::Node(std::string const&, rclcpp::NodeOptions const&) 嘿,这个链接器错误我可太熟了!说白了就是你的项目没和rclcpp库正确挂上钩,编译的时候找不到Node构造函数的实现。我给你列几个最容易踩坑的点和解决办法:
先检查CMakeLists.txt的基础配置
首先得确保你在CMake里找到了rclcpp包,开头一定要有这行:find_package(rclcpp REQUIRED)然后编译节点的时候,必须把rclcpp关联到你的可执行目标上,用ament的标准写法:
add_executable(你的节点名 src/你的节点源码.cpp) ament_target_dependencies(你的节点名 rclcpp)别用老的
target_link_libraries硬连,在ament_cmake体系里,ament_target_dependencies会自动处理头文件路径和链接库的所有细节,不容易出错。别漏了package.xml的依赖声明
很多人会忽略这个!你得在package.xml里同时声明编译和运行时对rclcpp的依赖:<build_depend>rclcpp</build_depend> <exec_depend>rclcpp</exec_depend>要是没加这个,colcon构建的时候根本不会把rclcpp的链接信息传递给你的项目,自然找不到函数实现。
代码层面的小检查
虽然这个不是主要原因,但也顺手确认下:你的C++源码开头有没有正确包含rclcpp的头文件?#include "rclcpp/rclcpp.hpp"头文件没引对的话,有时候也会间接导致奇怪的链接问题。
最后记得清缓存重建
改完配置文件后,千万别直接重新build,一定要删掉build和install目录,避免旧缓存搞事情:rm -rf build install colcon build --packages-select 你的包名
按照这几步走,大概率能解决这个链接错误,我之前帮好几个朋友排查过,都是CMake或者package.xml的配置漏了。
备注:内容来源于stack exchange,提问作者RevoLutioNs
相关产品推荐
相关产品推荐

