一 : fatal error: std_msgs/std_msgs/msg/string.hpp: 没有那个文件或目录 3 | #include "std_msgs/std_msgs/msg/string.hpp"报错分析
今天在学习的时候发现了一个报错如下
终端如下、
ywq@ywq-Dell-G15-5511:~/town_ws$ colcon build
Starting >>> village_li
Starting >>> village_wang
--- stderr: village_wang
/home/ywq/town_ws/village_wang/src/wang2.cpp:3:11: fatal error: std_msgs/std_msgs/msg/string.hpp: 没有那个文件或目录
3 | #include "std_msgs/std_msgs/msg/string.hpp"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/wang2_node.dir/build.make:76:CMakeFiles/wang2_node.dir/src/wang2.cpp.o] 错误 1
gmake[1]: *** [CMakeFiles/Makefile2:137:CMakeFiles/wang2_node.dir/all] 错误 2
gmake: *** [Makefile:146:all] 错误 2
---
Failed <<< village_wang [0.39s, exited with code 2]
原代码如下
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
编译找不到#include包含的"std_msgs/msg/string.hpp" 路径
这个问题困扰了我很长时间后来发现需要先在Cmakelist.txt文件中引用以下
输入以下代码
ament_target_dependencies(wang2_node rclcpp std_msgs)
即添加一个·新的路径依赖,问题得以解决。
二:colcon build 说明
随着代码量的增大我发现编译的时间越来越长,很不方便。为了解决这个问题:
我查询了colcon build 的使用帮助:
在终端中输入如下指令:
colcon build -h
得到如下(部分)
options:
-h, --help show this help message and exit
--build-base BUILD_BASE
The base path for all build directories (default:
build)
--install-base INSTALL_BASE
The base path for all install prefixes (default:
install)
--merge-install Merge all install prefixes into a single location
--symlink-install Use symlinks instead of copying files where possible
--test-result-base TEST_RESULT_BASE
The base path for all test results (default: --build-
base)
--continue-on-error Continue other packages when a package fails to build
(packages recursively depending on the failed package
are skipped)
1.--symlink-install
:使用符号链接而不是复制文件,如
以动态链接库为例,会在install目录中使用符号链接,指向build目录下生成的库文件(如 *.so). 没有该选项,则两个目录都会有该库文件 ,这个可以节省很多时间
2.--packages-select
:只编译指定包, 这个可以只编译一个和几个包,也是节约时间的
其他的我暂时也没用到这里不再赘述。可以自行查阅