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

    ubuntu20.4 noetic moveit测试程序编译时报undefined reference to 错误

    已定时 已固定 已锁定 已移动 未解决
    机器人学
    moveit cmake报错
    3
    3
    915
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Y
      yaodong
      最后由 编辑

      报错内容

      我复制了move_group_interface_tutorial.cpp,编辑时没有报错,编译时报错:

      [ 50%] Linking CXX executable /home/yaodong/cr20_ws/devel/lib/my_moveit_tutorial/my_move_group_interface_tutorial
      /usr/bin/ld: CMakeFiles/my_move_group_interface_tutorial.dir/src/my_move_group_interface_tutorial.cpp.o: in function `main':
      my_move_group_interface_tutorial.cpp:(.text+0x257): undefined reference to `moveit::planning_interface::MoveGroupInterface::MoveGroupInterface(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<tf2_ros::Buffer> const&, ros::WallDuration const&)'
      /usr/bin/ld: my_move_group_interface_tutorial.cpp:(.text+0x2b2): undefined reference to `moveit::planning_interface::PlanningSceneInterface::PlanningSceneInterface(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool)'
      /usr/bin/ld: my_move_group_interface_tutorial.cpp:(.text+0x2f5): undefined reference to `moveit::planning_interface::MoveGroupInterface::getCurrentState(double) const'
      /usr/bin/ld: my_move_group_interface_tutorial.cpp:(.text+0x5e9): undefined reference to `moveit::planning_interface::MoveGroupInterface::getPlanningFrame[abi:cxx11]() const'
      。。。。。。。
      

      headingCMakeLiists.txt内容如下:

      cmake_minimum_required(VERSION 3.0.2)
      project(my_moveit_tutorial)
      find_package(catkin REQUIRED COMPONENTS
        moveit_core
        moveit_msgs
        moveit_visual_tools
        roscpp
      )
      include_directories(
      # include   ${catkin_INCLUDE_DIRS}
      )
      add_executable(my_move_group_interface_tutorial src/my_move_group_interface_tutorial.cpp)
      target_link_libraries(my_move_group_interface_tutorial
        ${catkin_LIBRARIES}
      )
      
      
      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        错误提示中的 undefined reference to 表示链接器在尝试构建可执行文件时找不到相关的函数定义。这通常是因为在链接阶段没有正确地链接到所需的库。在你的情况中,MoveGroupInterface 和 PlanningSceneInterface 等类的函数定义在 MoveIt 的库中,但看起来这些库没有被正确链接到你的可执行文件中。

        你的 CMakeLists.txt 文件中有几个问题需要解决:

        1. 包含目录:你需要确保包含了 MoveIt 和相关依赖的头文件目录。虽然 find_package(catkin REQUIRED COMPONENTS ...) 会设置一些标准的包含目录,但有时候对于特定的库(尤其是非标准库路径安装的库),你可能需要手动添加包含目录。不过,对于标准的 ROS 和 MoveIt 安装,这通常不是必需的。

        2. 链接库:你的 target_link_libraries 调用使用了 ${catkin_LIBRARIES},这通常包含了所有通过 find_package 找到的 catkin 组件的库。然而,对于 ROS 和 MoveIt,通常更好的做法是显式地使用 catkin_package() 和 add_dependencies() 来确保依赖关系正确设置。同时,确保你的组件列表完整。

        3. 组件列表:moveit_core 并不直接包含 MoveGroupInterface 和 PlanningSceneInterface 的实现。这些接口通常在 moveit_ros_planning_interface 和 moveit_ros_planning 等包中定义和实现。你需要确保这些包也被找到并链接。

        下面是一个修改后的 CMakeLists.txt 示例,这可能帮助你解决问题:

        cmake_minimum_required(VERSION 3.0.2)
        project(my_moveit_tutorial)
        
        find_package(catkin REQUIRED COMPONENTS
          roscpp
          moveit_ros_planning_interface  # 添加了此组件
          moveit_msgs
          moveit_visual_tools
        )
        
        # 通常不需要手动设置 include_directories,因为 find_package 会处理
        # include_directories(${catkin_INCLUDE_DIRS})
        
        add_executable(my_move_group_interface_tutorial src/my_move_group_interface_tutorial.cpp)
        
        # 使用 catkin_LIBRARIES 通常是可以的,但最好明确链接需要的库
        # 由于 moveit_ros_planning_interface 可能依赖于其他 moveit 组件,
        # 使用 ${catkin_LIBRARIES} 通常也能工作,但明确依赖更好
        target_link_libraries(my_move_group_interface_tutorial
          ${catkin_LIBRARIES}
        )
        
        # 确保你的包依赖关系正确设置
        catkin_package()
        

        注意:

        • 确保你的工作空间中已经安装了所有必要的 MoveIt 组件。
        • 清理并重新构建你的工作空间,以确保所有更改都已生效:
          cd ~/cr20_ws
          catkin_make clean
          catkin_make
          
        • 如果你使用的是 ament_cmake 而不是 catkin(ROS 2),那么构建系统会有所不同,但原理相似。

        如果问题仍然存在,检查你的 ROS 和 MoveIt 安装是否完整,或者尝试在不同的机器或环境中重现问题以排除特定环境配置的问题。


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

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

        1 条回复 最后回复 回复 引用 0
        • 3
          395510695
          最后由 编辑

          ament_target_dependencies(my_move_group_interface_tutorial rclcpp std_msgs moveit_ros_planning_interface)
          构建方式不同,问题是一样的,ament添加依赖

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