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

    代码报错

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    使用功能包组织c++节点 make代码报错
    3
    3
    898
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      2652250307
      最后由 编辑

      l@l-virtual-machine-22:~/VScode workplace/chapt2/demo_cpp_pkg/build$ make
      [ 50%] Building CXX object CMakeFiles/cpp_node.dir/src/cpp_node.cpp.o
      /home/l/VScode workplace/chapt2/demo_cpp_pkg/src/cpp_node.cpp:1:10: fatal error: rclcpp/rclcpp.hpp: 没有那个文件或目录
      1 | #include "rclcpp/rclcpp.hpp"
      | ^~~~~~~~~~~~~~~~~~~
      compilation terminated.
      make[2]: *** [CMakeFiles/cpp_node.dir/build.make:76:CMakeFiles/cpp_node.dir/src/cpp_node.cpp.o] 错误 1
      make[1]: *** [CMakeFiles/Makefile2:137:CMakeFiles/cpp_node.dir/all] 错误 2
      make: *** [Makefile:146:all] 错误 2

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        这个错误表明编译器在尝试编译你的 C++ 文件时,找不到 rclcpp/rclcpp.hpp 头文件。这通常是因为你的项目没有正确配置以包含 ROS 2 的头文件路径。rclcpp 是 ROS 2 中用于编写 C++ 节点的核心库。

        要解决这个问题,你可以按照以下步骤操作:

        1. 确保 ROS 2 已正确安装:
          首先,确保你的系统上已经安装了 ROS 2。你可以通过运行 ros2 --version 来检查 ROS 2 是否已安装以及其版本。

        2. 设置 CMakeLists.txt:
          你的 CMakeLists.txt 文件需要包含 ROS 2 的 CMake 宏和 find_package 指令,以便 CMake 能找到 rclcpp。这通常看起来像这样:

          cmake_minimum_required(VERSION 3.0.2)
          project(demo_cpp_pkg)
          
          # 找到ROS 2的rclcpp包
          find_package(rclcpp REQUIRED)
          
          # 添加可执行文件
          add_executable(cpp_node src/cpp_node.cpp)
          ament_target_dependencies(cpp_node rclcpp)
          
          # 链接rclcpp库
          target_link_libraries(cpp_node rclcpp::rclcpp)
          
          # 设置安装目标
          install(TARGETS
            cpp_node
            DESTINATION lib/${PROJECT_NAME}
          )
          
          ament_package()
          

          注意 find_package(rclcpp REQUIRED) 指令,它告诉 CMake 去查找 rclcpp 包。

        3. 配置工作空间和构建项目:
          确保你的项目是在一个 ROS 2 工作空间中,并且你已经正确设置了工作空间。通常,你需要使用 colcon 来构建你的 ROS 2 工作空间,而不是直接使用 make。但是,如果你使用的是传统的 CMake 方式(如你在问题中所示),你需要确保 CMake 能够找到 ROS 2 的安装路径。这通常通过设置 CMAKE_PREFIX_PATH 环境变量来实现,它应该包含 ROS 2 的安装路径(例如 /opt/ros/<distro>)。

          如果你使用的是 colcon,你的构建命令将类似于:

          colcon build --packages-select demo_cpp_pkg
          

          如果你坚持使用 CMake,你可以尝试在构建之前设置 CMAKE_PREFIX_PATH:

          export CMAKE_PREFIX_PATH=/opt/ros/<distro>:$CMAKE_PREFIX_PATH
          mkdir -p build && cd build
          cmake ..
          make
          

          替换 <distro> 为你的 ROS 2 发行版名称(如 foxy、galactic 等)。

        4. 检查路径和环境变量:
          确保你的环境变量(如 LD_LIBRARY_PATH 和 PATH)包含了 ROS 2 的路径。这通常在你的 ROS 2 工作空间 setup.bash 脚本中设置。确保在构建和运行你的 ROS 2 应用程序之前已经 source 了这个脚本。

        5. 重新构建项目:
          在调整了 CMakeLists.txt 或环境变量后,重新构建你的项目。

        如果以上步骤仍然无法解决问题,可能需要检查你的 ROS 2 安装是否完整,或者是否有其他配置问题。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

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

          @2652250307 https://fishros.org.cn/forum/topic/151/提问前必看-不符合要求的问题拒绝回答

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

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