@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的行。
使用上面的指令,可以看到这个文件确实在这里。
image-20220603130600648
接着我们可以用-I(大写i)来为g++指定这个目录,然后再次运行,你会发现依然报错
g++ first_ros2_node.cpp -I /opt/ros/humble/include/rclcpp/