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

    代码报错求助

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

      C++创建节点时对代码进行编译报错

      b21a20ae-1b55-4aa3-8b28-f8de766852cc.png

      cmake_minimum_required (VERSION 3.8)
      project (ros2_cpp)
      add_executable(rs2_cpp_noode ros2_cpp_node.cpp)
      find_package(rclcpp REQUIRED)
      target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS})
      target_link_libraries(ros2_cpp_node ${rclcpp_LTBRARIES})

      l@l-virtual-machine-22:~/VScode workplace/chapt2$ cmake .
      -- The C compiler identification is GNU 11.4.0
      -- The CXX compiler identification is GNU 11.4.0
      -- Detecting C compiler ABI info
      -- Detecting C compiler ABI info - done
      -- Check for working C compiler: /usr/bin/cc - skipped
      -- Detecting C compile features
      -- Detecting C compile features - done
      -- Detecting CXX compiler ABI info
      -- Detecting CXX compiler ABI info - done
      -- Check for working CXX compiler: /usr/bin/c++ - skipped
      -- Detecting CXX compile features
      -- Detecting CXX compile features - done
      -- Found rclcpp: 16.0.10 (/opt/ros/humble/share/rclcpp/cmake)
      -- Found Python3: /usr/bin/python3 (found version "3.10.12") found components: Interpreter
      -- Found rosidl_generator_c: 3.1.5 (/opt/ros/humble/share/rosidl_generator_c/cmake)
      -- Found rosidl_adapter: 3.1.5 (/opt/ros/humble/share/rosidl_adapter/cmake)
      -- Found rosidl_generator_cpp: 3.1.5 (/opt/ros/humble/share/rosidl_generator_cpp/cmake)
      -- Using all available rosidl_typesupport_c: rosidl_typesupport_fastrtps_c;rosidl_typesupport_introspection_c
      -- Using all available rosidl_typesupport_cpp: rosidl_typesupport_fastrtps_cpp;rosidl_typesupport_introspection_cpp
      -- Found rmw_implementation_cmake: 6.1.2 (/opt/ros/humble/share/rmw_implementation_cmake/cmake)
      -- Found rmw_fastrtps_cpp: 6.2.7 (/opt/ros/humble/share/rmw_fastrtps_cpp/cmake)
      -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "3.0.2")
      -- Found FastRTPS: /opt/ros/humble/include
      -- Using RMW implementation 'rmw_fastrtps_cpp' as default
      -- Looking for pthread.h
      -- Looking for pthread.h - found
      -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
      -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
      -- Found Threads: TRUE
      CMake Error at CMakeLists.txt:5 (target_include_directories):
      Cannot specify include directories for target "ros2_cpp_node" which is not
      built by this project.

      CMake Error at CMakeLists.txt:6 (target_link_libraries):
      Cannot specify link libraries for target "ros2_cpp_node" which is not built
      by this project.

      -- Configuring incomplete, errors occurred!
      See also "/home/l/VScode workplace/chapt2/CMakeFiles/CMakeOutput.log".
      l@l-virtual-machine-22:~/VScode workplace/chapt2$ make
      make: *** 没有指明目标并且找不到 makefile。 停止。

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

        您遇到的错误主要是因为 target_include_directories 和 target_link_libraries 调用时目标名称错误。在您的 CMakeLists.txt 文件中,您创建的可执行文件名为 rs2_cpp_noode,但在后续配置中您使用了 ros2_cpp_node。这导致了 CMake 无法找到相应的目标来设置包含目录和链接库。

        为了解决这个问题,请按照以下步骤修改您的 CMakeLists.txt 文件:

        1. 更正可执行文件的名称:确保您在 add_executable 中使用的名称与后续在 target_include_directories 和 target_link_libraries 中使用的名称一致。

        2. 确保在 find_package 调用之后添加可执行文件和库依赖:因为您需要基于找到的包来设置包含目录和链接库。

        修改后的 CMakeLists.txt 应该如下所示:

        cmake_minimum_required (VERSION 3.8)
        project (ros2_cpp)
        
        # 查找rclcpp
        find_package(rclcpp REQUIRED)
        
        # 添加可执行文件
        add_executable(ros2_cpp_node ros2_cpp_node.cpp)
        
        # 设置包含目录
        target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS})
        
        # 设置链接库
        target_link_libraries(ros2_cpp_node ${rclcpp_LIBRARIES})  # 注意这里修正了变量名,原来是 ${rclcpp_LTBRARIES}
        
        # 注意:如果您还有其他依赖,确保在这里也设置好
        

        其他注意事项:

        • 确保 ros2_cpp_node.cpp 文件存在并且包含正确的 ROS 2 节点代码。
        • 检查 rclcpp_LIBRARIES 是否是您需要的正确变量名(通常这是正确的,但请根据您的 ROS 2 版本和安装情况验证)。
        • 确保您的 CMake 版本与 ROS 2 要求的版本兼容。

        完成上述修改后,重新运行 CMake 和 make 命令:

        cmake .
        make
        

        如果一切正常,这将编译您的 ROS 2 节点。


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

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

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

          @小伊 在 代码报错求助 中说:

          您遇到的错误主要是因为 target_include_directories 和 target_link_libraries 调用时目标名称错误。在您的 CMakeLists.txt 文件中,您创建的可执行文件名为 rs2_cpp_noode,但在后续配置中您使用了 ros2_cpp_node。这导致了 CMake 无法找到相应的目标来设置包含目录和链接库。

          正解

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

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