dpkg-shlibdeps 不提供版本信息

dpkg-shlibdeps 不提供版本信息

我正在创建一个依赖于 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! 的错误打包人员,他们可以做什么,在等待包修复期间我可以做什么?

有关 MoveIt! 的更多信息:

  • 我在用这个 .deb 包
  • 没有.符号文件。
  • 文件 /var/lib/dpkg/info/ros-noetic-moveit-core.shlibs 包含以下内容:
#...
libmoveit_robot_model 1.1.7 ros-noetic-moveit-core
#...

答案1

这确实是一个打包问题(也可以说是一个库定义问题)。在我开始之前,您可以采取以下措施来修复它:您可以shlibsdebian/shlibs.local包的源代码中或在/etc/dpkg/shlibs.override.添加一行表格

libmoveit_robot_model 1.1.7 ros-noetic-moveit-core (>= 1.1.7), ros-noetic-moveit-core (<< 1.1.8)

将您的包与该包的 1.1.7 版本绑定ros-noetic-moveit-core

ros-noetic-moveit-core其本身而言,它应该将其库放在一个包中,该包的名称反映了包的soname。如果包的每个版本都不向后兼容,则该名称应包含完整版本(因此在包名称及其元数据中会重复)。如果版本 1.1.8 应该是 1.1.7 的直接替代品,那么 soname 应该停止在 1.1 甚至 1。Debian 政策的相关章节描述了不仅与 Debian 相关的最佳实践,关于共享库的章节这个脚注给出一个命令来计算库的适当包名称.

相关内容