创建Debian软件包时,解决`${shlibs:Depends}`的详细过程是什么?

我最近的工作涉及大量的Debian软件包管理,我正在使用Debian新维护者指南作为我的主要参考文献。
我还没有完全理解${shlibs:Depends}是如何被解析成具体的软件包和版本的。我所指的"如何"是指从变量${shlibs:Depends}Depends字段中的最终软件包列表的详细步骤。 第4章说:

dh_shlibdeps(1)计算二进制软件包的共享库依赖项。它为每个二进制软件包生成了一个ELF可执行文件和共享库列表。这个列表用于替换${shlibs:Depends}。

我想我真正感兴趣的是"为每个二进制软件包生成一个ELF可执行文件和共享库列表"的详细步骤,比如使用了哪些信息来源。
我还查看了《Debian政策手册》中的"8.6.4. The shlibs system"部分,它提供了一些信息来源,但似乎仍然没有详细讲述具体步骤。
我可以深入研究dh_shlibdeps脚本来弄清楚它是如何实现的,但我不愿意这样做,因为我还没有学习Perl,所以我想知道是否有其他我不知道的参考资料已经涵盖了这个问题。如果没有这样的参考资料,我肯定会阅读代码。
谢谢!

1一个提示:${shlibs:Depends}似乎是由dpkg-shlibdeps(或dh_shlibdeps)使用文件debian/shlibs.local来解析的(参见这里),其格式由deb-shlibs(5)定义。换句话说,如果一个Debian软件包没有debian/shlibs.local${shlibs:Depends}可能会被解析为空列表。(“提示”意味着上面的信息可能有助于找出详细的过程,但我还没有验证我上面所说的。) - yaobin
1个回答

这个话题对我来说也是新的,但是这里是我能收集到的(可能没有完全排序),并省略了一些全局设置文件。
ldd
dpkg -S
deb-shlibs

objdump
deb-symbols
dpkg-gensymbols

debian/shlibs.local
dpkg-shlibdeps
debian/substvars .. shlibs:dependency-field

解决符号问题有点复杂,一些工具只是依赖于库而不是依赖于软件包,只需在Debian软件包中准备库信息即可供Debian软件包构建器使用。无论如何,请查看:

  • MOTU:库打包
  • man dpkg-shlibdeps以及底部注释中提到的其他相关手册页。