为什么 linux 不允许在中央存储库中有多个版本?

Mar*_*och 2 libraries dependencies repository shared-library

在我看来,使用 Linux 的很多问题都是由于不匹配的依赖关系。具体来说,您不能安装两个版本的库。

因此,如果程序 A 需要“lib1.2”而程序 B 需要“lib1.3”,则它们不能一起运行。

题:

  1. 那是对的吗?
  2. 为什么中央存储库不仅支持同时拥有 lib1.2 和 lib1.3,而且程序将获得他们要求的版本?

Dmi*_*yev 6

在大多数 Linux 发行版中,系统中有多个版本的库不是问题:具有不同soname 的共享库可以共存于同一/usr/lib目录中。此外,可以通过指定正确的包名称来指示包管理器安装几个这样的库:

apt-get install libjpeg7
apt-get install libjpeg8
Run Code Online (Sandbox Code Playgroud)

实际上,您可能会遇到此系统的两个缺陷:

  1. 大多数发行版为每个发行版仅提供一个库版本以节省空间。例如,我的 Debian Wheezy 只有libjpeg8. 您仍然可以libjpeg7从源代码安装特定的库版本(例如),并且它将与其他版本共存而不会出现问题。你甚至可以尝试从另一个发行版安装一个包,但要小心,因为它可能会产生大量的依赖。

  2. 有时,具有相同 soname(旨在兼容)的两个库版本适用于某些程序而不适用于其他程序。顺便说一下,这是首先拥有多个发行版的主要原因。这种情况下的解决方案是将不兼容的库保留在外面,/usr/lib并通过 LD_LIBRARY_PATH 或 chroot 使特定程序可以访问它们。