我正在构建一个依赖于 Qt6 的应用程序,默认情况下会为未明确指定的 shlibs 依赖项dpkg-buildpackage
生成依赖项。因此指定:>=
Depends: ${shlibs:Depends}
原因:
$ dpkg-query --show -f '${Depends}' mypackage
... qt6-base (>= 6.7.2), ...
问题是 Qt 需要应用程序所针对的确切特定版本才能运行。如果系统已安装qt6-base
该版本6.8.0
,我的应用程序将安装但无法运行 - 我该如何防止这种情况发生?
我不想apt
更新我的应用程序,直到我有一个明确支持系统上可用的 Qt 的确切版本的版本(和/或阻止更新 Qt,直到我发布适当的版本)。
我知道我可以为我依赖的每个 Qt 包添加手动显式依赖项 - 然后每次使用新 Qt 版本构建时手动更新版本 - 但这会很麻烦。我希望有一个选项,例如“对于名称中包含文本‘qt’的包,使用=
依赖项而不是>=
”。
除了在相关符号文件中明确指定严格依赖项外,没有其他方法可以强制
dpkg-shlibdeps
生成严格依赖项,而不是更典型的“≥”依赖项。Qt 软件包确实定义了此类严格依赖项,作为替代依赖项:但是,这些仅用于直接引用具有版本的私有 API 符号的
Qt_6_PRIVATE_API
二进制文件(该行末尾的“1”指示dpkg-shlibdeps
使用替代依赖项 1 而不是主依赖项)。我不知道如何在您的包中自动使用它,至少在不使用私有 API 的情况下不行,因为私有 API 不是一个好主意。但您可以自己手动使用 ABI 包,并对适当的 ABI 版本进行单一显式依赖:
与手动指定所有相应库包的严格依赖关系相比,这样做的优势在于,只有当 ABI 发生变化时,依赖关系才会中断。向所有库包添加严格依赖关系意味着对这些包(包括维护 ABI 的包)的任何更新都需要您更新包。