colcon build 结果报错,显示 : fatal error: std_msgs/msg/u_int32.hpp: 没有那个文件或目录
-
colcon build 结果报错,显示 :
fatal error: std_msgs/msg/u_int32.hpp: 没有那个文件或目录
但翻阅ros/humble/确实存在相关节点c_cpp_properties。json设置如下
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${default}",
"${workspaceFolder}/",
"/opt/ros/humble/include/"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}Starting >>> city
--- stderr: city
/home/csy/example/src/city/src/boss_zhang.cpp:3:10: fatal error: std_msgs/msg/u_int32.hpp: 没有那个文件或目录
3 | #include "std_msgs/msg/u_int32.hpp"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/boss_zhang_node.dir/build.make:76:CMakeFiles/boss_zhang_node.dir/src/boss_zhang.cpp.o] 错误 1
gmake[1]: *** [CMakeFiles/Makefile2:137:CMakeFiles/boss_zhang_node.dir/all] 错误 2
gmake: *** [Makefile:146:all] 错误 2Failed <<< city [0.90s, exited with code 2]
Summary: 0 packages finished [1.52s]
1 package failed: city
1 package had stderr output: city
1 package not processed -
@782270236 这个问题一般是cmakelists配置错误引起的
建议学习下动手学ROS2基础篇内容
摘取第四节如下
4.CMake依赖查找流程
上面我们用g++、make、cmake三种方式来编译ros2的C++节点。用cmake虽然成功了,但是CMakeLists.txt的内容依然非常的臃肿,我们需要将其进一步的简化。
1.优化CMakeList.txt
将上面的CmakLists.txt改成下面的样子
cmake_minimum_required(VERSION 3.22) project(first_node) find_package(rclcpp REQUIRED) add_executable(first_node first_ros2_node.cpp) target_link_libraries(first_node rclcpp::rclcpp)
接着继续生成和编译
cmake .. make
是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?
2.find_package查找路径
find_package查找路径对应的环境变量如下。
<package>_DIR CMAKE_PREFIX_PATH CMAKE_FRAMEWORK_PATH CMAKE_APPBUNDLE_PATH PATH
打开终端,输入指令:
echo $PATH
结果
PATH=/opt/ros/humble/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
观察PATH变量,你会发现
/opt/ros/humble/bin
赫然在其中,PATH
中的路径如果以bin
或sbin
结尾,则自动回退到上一级目录,接着检查这些目录下的<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ (U) <prefix>/(lib/<arch>|lib|share)/<name>*/ (U) <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (U)
cmake找到这些目录后,会开始依次找
<package>Config.cmake
或Find<package>.cmake
文件。找到后即可执行该文件并生成相关链接信息。打开
/opt/ros/humble/share/rclcpp/cmake
你会发现rclcppConfig.cmake
就在其中。3.总结
本节小鱼带你通过多种方式进行节点的编译,主要是让你了解C++编译工具cmake以及其路径查找规则,以后在学习生涯中再遇到
undefined reference to xxxxx
和No such file or directory
就再也不用慌张了。 -
我也遇到了这个问题。看一下CmakLists.txt文件依赖语句里有没有包含功能包。比如:ament_target_dependencies(wang2_pop_node rclcpp std_msgs)语句里是否加了std_msgs
参考文章:
https://blog.csdn.net/OOODDD1212/article/details/126213129