我正在创建一个依赖于 ROS 包 ros-noetic-moveit-core 的包。更具体地说,它包含一个链接到libmoveit_robot_model.so
.
libmoveit_robot_model.so
是 ia 的符号链接libmoveit_robot_model.so.1.1.7
,因此libmoveit_robot_model.so.1.1.7
在我的共享库的 NEEDED 部分结束。
但是,当我打包它时,dpkg-shlibdeps 只添加ros-noetic-moveit-core
到 shlibs 依赖中,没有任何版本信息。
当移动它!更新到较新的版本,就像从 1.1.6 更新时所做的那样,库libmoveit_robot_model.so.1.1.7
将被替换为libmoveit_robot_model.so.1.1.8
(例如),我的包将不再链接,而 dpkg 看不到冲突。
如何确保我的包正确告知其依赖项?我看到两个解决方案:
- 找到一种在链接时不包含版本后缀的方法,以便我的包与多个版本的 MoveIt! 兼容,但我不喜欢这个解决方案(特别是因为 MoveIt! 不提供符号文件或事件与主要版本的符号链接后缀,如
libmoveit_robot_model.so.1
)。 - 想办法让 dpkg-shlibdeps 找到 MoveIt 的使用版本!所以我的包与 MoveIt! 一起升级。
如果是来自 MoveIt 的错误!packager,他们能做什么,在等待包裹修复的时候我能做什么?
关于 MoveIt! 的更多信息:
- 我正在使用这个 .deb 包。
- 没有.symbols文件。
- 文件 /var/lib/dpkg/info/ros-noetic-moveit-core.shlibs 包含以下内容:
#...
libmoveit_robot_model 1.1.7 ros-noetic-moveit-core
#...
这确实是一个打包问题(并且可以说是一个库定义问题)。在我开始之前,您可以采取以下措施来修复它:您可以
shlibs
在debian/shlibs.local
包的源代码中或在/etc/dpkg/shlibs.override
. 添加一行表格将您的包绑定到包的 1.1.7 版本
ros-noetic-moveit-core
。至于
ros-noetic-moveit-core
它自己,它应该将其库放在一个包中,该包的名称反映了包的 soname。如果包的每个版本都不向后兼容,则该名称应包含完整版本(因此在包名称及其元数据中重复)。如果版本 1.1.8 应该是 1.1.7 的直接替代品,那么 soname 应该停止在 1.1 甚至 1。 Debian Policy 的相关章节,描述了不仅与 Debian 有关的最佳实践,是章节在共享库上。此脚注提供了一个命令来计算库的适当包名称。