假设这MyPackage.deb
取决于 GTK 2.19,因为它基于 2.20 中已弃用的功能。当我想要apt-get install TheirProgram
ordpkg -i TheirProgram.deb
并且 GTK 2.21+ 是必需的依赖项时会发生什么?遇到这样的情况我该怎么办?
答案1
一般来说,引入向后不兼容性的库的新版本应该更改其soname,然后这将产生一个新的包名称对于运行时库(例如对于 GTK+,libgtk2.0-0
和libgtk2.1-0
/或任何合适的)。在不遵循此规则的情况下引入破坏性版本升级通常被认为是一个严重的错误。
这意味着,在大多数情况下,两个运行时库以及依赖包都可以同时安装:您MyPackage.deb
将拉入旧库,TheirProgram.deb
也会拉入新库。这在 Debian 库转换期间使用:当上传一个新的、向后不兼容的库版本时,过渡启动后,直到所有依赖包都被重建后,库的两个版本都可以在存档中使用。
当然,作为一般规则,发行版尝试一次只携带一个版本的库,因此旧库将从档案中消失,但只要您安装了它,MyPackage
就应该继续工作。不过,您不会在旧版本的库上获得任何安全支持,并且不能保证它将继续工作(或者没有其他包会破坏它),因此从长远来看,您最好修复MyPackage
以便它可以与较新版本的 GTK+ 一起使用。
如果新版本的 GTK+ 向后兼容,则包名称不会更改,但(错误除外)运行时库仍将允许MyPackage
工作 - 因此安装TheirProgram
将强制 GTK+ 升级,但MyPackage
不应受到影响。 (它可能会在执行期间打印更多弃用警告。)