小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
moveit2 humble的代码编译问题,链接的时候失败了
-
本地创建一个pkg的时候构建失败了,请大佬们帮忙看一下
代码就是安装官方教程里hello_moveit的例子,就不贴了: https://moveit.picknik.ai/humble/doc/tutorials/your_first_project/your_first_project.html然后在官方的src里创建了个arm_control的包,然后构建是通过的, 路径是这个样子的,可以构建通过,也能跑起来
└── src
├── arm_control
├── launch_param_builder
├── moveit2
├── moveit2_tutorials
├── moveit_resources
├── moveit_task_constructor
├── moveit_visual_tools
├── rosparam_shortcuts
└── srdfdom
但是我自己创建了一个新的ros的package,单独放了我的这个arm_control的包,一模一样的代码,构建就报错了,我即使又source了moveit2那个文件夹里install/setup.sh也不行
Starting >>> arm_control
Consolidate compiler generated dependencies of target arm_control
[ 50%] Linking CXX executable arm_control
/usr/bin/ld: /opt/ros/humble/lib/libmoveit_warehouse.so.2.5.5: undefined reference to `warehouse_ros::DatabaseLoader::~DatabaseLoader()'
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/arm_control.dir/build.make:355:arm_control] 错误 1
gmake[1]: *** [CMakeFiles/Makefile2:137:CMakeFiles/arm_control.dir/all] 错误 2
gmake: *** [Makefile:146:all] 错误 2
Failed <<< arm_control [0.29s, exited with code 2] -
从您提供的错误信息来看,问题出在链接阶段,具体是链接到
libmoveit_warehouse.so
时遇到了未定义的引用。这通常是因为某些必要的库没有被正确链接到您的项目中,或者库之间的依赖关系没有正确解决。以下是一些可能的解决步骤:-
检查 CMakeLists.txt:
确保您的CMakeLists.txt
文件中包含了所有必要的依赖项。特别是与 MoveIt 相关的库,如moveit_warehouse
。您需要在find_package()
中找到并包含 MoveIt 的相关包,并在target_link_libraries()
中添加必要的库。例如:find_package(catkin REQUIRED COMPONENTS roscpp moveit_core moveit_warehouse # 其他可能需要的库 ) catkin_package() include_directories( ${catkin_INCLUDE_DIRS} ) add_executable(arm_control src/arm_control.cpp) target_link_libraries(arm_control ${catkin_LIBRARIES} moveit_warehouse)
注意:确保
moveit_warehouse
以及其他所有必要的库都被正确地链接。 -
检查 MoveIt 和其他依赖的安装:
确保您已经正确安装了 MoveIt 和所有相关的依赖库。您可以通过运行sudo apt install ros-humble-moveit-*
来安装所有 MoveIt 相关的包(注意,这里使用了通配符*
,但在实际使用中可能需要更具体地指定需要的包)。 -
检查环境变量:
确保在编译前已经正确设置了 ROS 环境变量。这通常通过运行source /opt/ros/humble/setup.bash
(或者您的 ROS 安装路径)来完成。同时,如果 MoveIt 是在不同的工作空间中安装的,也需要确保那个工作空间的setup.bash
也被正确 source。 -
清理和重新构建:
有时候,旧的构建文件可能会导致问题。尝试清理您的构建目录(通常是build
和devel
目录),然后重新运行catkin_make
或colcon build
(取决于您使用的构建系统)。 -
检查库的版本:
确保您链接的库版本与您的 ROS 版本和 MoveIt 版本兼容。 -
查看 MoveIt 文档和社区:
如果问题仍然存在,查看 MoveIt 的官方文档和社区论坛可能会有帮助。可能有人遇到过类似的问题,并分享了解决方案。 -
使用
ldd
检查库依赖:
您可以使用ldd
命令来检查libmoveit_warehouse.so
的依赖关系,看是否有任何缺失或错误的库链接。
希望这些步骤能帮助您解决问题!如果问题仍然存在,请提供更多的信息,如完整的
CMakeLists.txt
文件内容等,以便进一步分析。
以上为生成回答,仅供参考~
-
-
想明白为啥了,添加了依赖库,搞定...