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

    C++节点 make函数报错

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    c++节点 编译 编译失败 make指令
    3
    4
    410
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1334576388
      最后由 编辑

      为什么在输入查找和添加依赖的指令后,make指令还会报错?

      cmake_minimum_required(VERSION 3.8)
      project (ros2_cpp)
      add_executable(ros2_cpp_node ros2_cpp_node.cpp)

      find_package(rclcpp REQUIRED)
      target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUED_DIRS})
      target_link_libraries(ros2_cpp_node ${rclcpp_LIBRARIES})

      错误如下:
      zzz@study01:~/chart2$ make
      [ 50%] Building CXX object CMakeFiles/ros2_cpp_node.dir/ros2_cpp_node.cpp.o
      /home/zzz/chart2/ros2_cpp_node.cpp:1:10: fatal error: rclcpp/rclcpp.hpp: 没有那个文件或目录
      1 | #include "rclcpp/rclcpp.hpp"
      | ^~~~~~~~~~~~~~~~~~~
      compilation terminated.
      make[2]: *** [CMakeFiles/ros2_cpp_node.dir/build.make:76:CMakeFiles/ros2_cpp_node.dir/ros2_cpp_node.cpp.o] 错误 1
      make[1]: *** [CMakeFiles/Makefile2:85:CMakeFiles/ros2_cpp_node.dir/all] 错误 2
      make: *** [Makefile:101:all] 错误 2

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

        根据你提供的错误信息和CMakeLists.txt文件,问题出现在几个方面:

        1. CMakeLists.txt中的错误:

          • find_package 应该是 find_package(REQUIRED COMPONENTS ...) 的形式,但在ROS 2中通常使用 find_package(REQUIRED CONFIG) 来查找包配置文件,随后使用 ament_target_dependencies 来添加依赖。
          • 变量名错误:${rclcpp_INCLUED_DIRS} 应该是 ${rclcpp_INCLUDE_DIRS}。
        2. 正确的CMakeLists.txt设置:
          对于ROS 2项目,CMakeLists.txt应该类似于以下格式:

          cmake_minimum_required(VERSION 3.5)
          project(ros2_cpp)
          
          # 查找ament_cmake(ROS 2的构建系统)
          find_package(ament_cmake REQUIRED)
          find_package(rclcpp REQUIRED)
          
          # 添加可执行文件
          add_executable(ros2_cpp_node src/ros2_cpp_node.cpp)
          
          # 添加依赖
          ament_target_dependencies(ros2_cpp_node rclcpp)
          
          # 包含rclcpp的头文件目录(通常ament_target_dependencies会自动处理,但显式添加也无妨)
          target_include_directories(ros2_cpp_node PRIVATE ${rclcpp_INCLUDE_DIRS})
          
          # 链接库(通常ament_target_dependencies会自动处理,但显式添加也无妨)
          target_link_libraries(ros2_cpp_node PRIVATE ${rclcpp_LIBRARIES})
          
          # 安装目标
          install(TARGETS
            ros2_cpp_node
            DESTINATION lib/${PROJECT_NAME})
          
          ament_package()
          

          注意几点:

          • 使用 ament_target_dependencies 来添加依赖,这是ROS 2推荐的方式。
          • 确保 add_executable 中的源文件路径正确(这里假设源文件在 src 目录下)。
          • 使用 PRIVATE 或 PUBLIC 关键字来指定包含目录和链接库的可见性。
        3. 构建问题:

          • 确保你已经正确安装了ROS 2,并且环境变量(如 COLCON_PREFIX_PATH 或 AMENT_PREFIX_PATH)已经设置,以便CMake可以找到ROS 2的安装位置。
          • 使用 colcon build 而不是 make 来构建ROS 2项目,因为ROS 2推荐使用 colcon 作为构建系统。
        4. 使用colcon构建:

          • 在项目根目录下(包含CMakeLists.txt的目录),运行:
            colcon build
            
          • 这将处理依赖关系,编译代码,并生成可执行文件。

        通过以上步骤,你应该能够解决编译问题。如果仍然遇到问题,请检查ROS 2是否安装正确,以及所有相关的环境变量是否设置正确。


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

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

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

          @1334576388 cmake 先

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

          1 1 条回复 最后回复 回复 引用 0
          • 1
            1334576388 @小鱼
            最后由 编辑

            @小鱼 搞定了,我配置了一下环境之后就又可以了

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