dpkg:是否可以分割${shlibs:Depends}?

dpkg:是否可以分割${shlibs:Depends}?

我正在构建一个由主二进制文件和许多 .so 插件组成的项目。每个 .so 插件都链接到一个特定的库,它们都将“通用”API 导出到主二进制文件,然后 dlopen() 将它们打开。

例如,如果基本 Linux 发行版有 10 多个不同的声音输出库,我将有 10 个声音输出 .so 插件,为主二进制文件提供相同的 API,因此如果其中 9 个插件由于未安装库而无法 dlopen(),这也没关系:成功 dlopen() 只需 1 个就足够了。这就是为什么我将 ${shlibs:Depends} 放入“Recommends:”而不是“Depends:”的原因。

不幸的是,这还会将主二进制文件的依赖项置于“推荐:”中,而这并不是我真正想要的。有没有办法将 ${shlibs:Depends} 拆分成几部分?如果我可以按二进制名称拆分它,例如 ${shlibs:Depends(main_binary)}、${shlibs:Depends(solib1.so)} 等,那会很有帮助。但按模式拆分也可以。

那么有没有什么办法可以分割这些变量呢?

答案1

您可以通过指定适当的参数来实现这一点dpkg-shlibdeps;在您的例子中,例如

dpkg-shlibdeps -dDepends -emain_binary \
               -dRecommends -esolib1.so -esolib2.so ...

然后在适当的位置使用${shlibs:Depends}和。${shlibs:Recommends}

如果您使用dh覆盖,请使用

override_dh_shlibdeps:
        dpkg-shlibdeps ...

您可以在以下位置找到一个(稍微复杂一些的)示例葡萄酒包装。它将dh_shlibdeps再次运行,因为它的dpkg-shlibdeps覆盖仅处理一个包。

答案2

根据 Stephen Kitt 的回答,我做了以下覆盖:

override_dh_shlibdeps:
    dh_shlibdeps -X.so
    dh_shlibdeps -- -dRecommends -pshlibs-

第一个为不包括.so插件文件的主要二进制文件创建${shlibs:Depends},第二个创建${shlibs-:Recommends}。

请注意,我必须将 var 前缀修改为“shlibs-”,以便第二次调用 dpkg-shlibdeps 不会覆盖第一次调用的结果。看来,仅使用 -d 指定新后缀不足以防止覆盖:在生成 ${shlibs:Recommends} 之前,它会出于某种原因删除所有 ${shlibs:*}。但使用 -p 修改前缀可以解决问题。

相关内容