@15136752158 你放的位置不一定在要找的目录中,关于g++路径设置可以参考文章

原文链接: https://fishros.com/d2lros2/#/humble/chapt2/basic/1.使用g++编译ROS2节点

2.2 编译

接着我们使用g++来编译first_node节点。正常的话一定会报错。

g++ first_ros2_node.cpp

报错内容如下:

root@490925f19143:~/d2lros2/d2lros2/chapt2/basic# g++ first_ros2_node.cpp first_ros2_node.cpp:3:10: fatal error: rclcpp/rclcpp.hpp: No such file or directory 3 | #include "rclcpp/rclcpp.hpp" | ^~~~~~~~~~~~~~~~~~~ compilation terminated.

一定要记住这个错误 No such file or directory,这将是你接下来机器人学习工作生涯中最常见的错误之一。

接着小鱼来说说错误原因和解决方案。

原因我们在代码里包含了"rclcpp/rclcpp.hpp"头文件,但是g++找不到这个头文件,解决方法就是告诉g++这个头文件的目录。

首先我们要找到这个头文件在哪里,这个头文件是ROS2的客户端库,其地址肯定在ROS2的安装目录下,即/opt/ros/humble/include/rclcpp。

cd /opt/ros/humble/include/rclcpp ls rclcpp/* | grep rclcpp.h

ls指令列出命令 | grep rclcpp.h 是对列出的结果进行过滤,只显示包含rclcpp.h的行。

使用上面的指令,可以看到这个文件确实在这里。

接着我们可以用-I(大写i)来为g++指定这个目录,然后再次运行,你会发现依然报错

g++ first_ros2_node.cpp -I /opt/ros/humble/include/rclcpp/