鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    colcon build 结果报错,显示 : fatal error: std_msgs/msg/u_int32.hpp: 没有那个文件或目录

    已定时 已固定 已锁定 已移动 未解决
    ROS 2相关问题
    colcon ros2 vscode
    3
    3
    1.5k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 7822702367
      此身虚度春雨中
      最后由 编辑

      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] 错误 2

      Failed <<< 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

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @782270236
        最后由 编辑

        @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
        

        image-20220603145533742

        是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?

        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就再也不用慌张了。

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        1 条回复 最后回复 回复 引用 0
        • 28267785952
          无处在 ROS2开发者
          最后由 编辑

          我也遇到了这个问题。看一下CmakLists.txt文件依赖语句里有没有包含功能包。比如:ament_target_dependencies(wang2_pop_node rclcpp std_msgs)语句里是否加了std_msgs
          参考文章:
          https://blog.csdn.net/OOODDD1212/article/details/126213129

          1 条回复 最后回复 回复 引用 0
          • 第一个帖子
            最后一个帖子
          皖ICP备16016415号-7
          Powered by NodeBB | 鱼香ROS