Libraries
為什麼 linux 不允許中央儲存庫中有多個版本?
在我看來,使用 Linux 的很多問題都是由於不匹配的依賴關係造成的。特別是您不能安裝兩個版本的庫。
因此,如果程序 A 需要“lib1.2”而程序 B 需要“lib1.3”,則它們不能一起執行。
問題:
- 那是對的嗎?
- 為什麼中央儲存庫不僅支持同時擁有 lib1.2 和 lib1.3 並且程序將獲得他們要求的版本?
在大多數 Linux 發行版中,系統中有多個版本的庫不是問題:具有不同sonames的共享庫可以共存於同一
/usr/lib
目錄中。此外,可以通過指定正確的包名稱來指示包管理器安裝幾個這樣的庫:apt-get install libjpeg7 apt-get install libjpeg8
實際上,您可能會遇到此系統的兩個缺陷:
- 大多數發行版只為每個發行版版本提供一個庫版本以節省空間。例如,我的 Debian Wheezy 只有
libjpeg8
. 您仍然可以libjpeg7
從原始碼安裝特定的庫版本(例如 ),並且它將與其他版本共存而不會出現問題。你甚至可以嘗試從另一個發行版安裝一個包,但要小心,因為它可能會拉取大量依賴項。- 有時,具有相同 soname 的兩個庫版本(旨在兼容)適用於某些程序而不適用於其他程序。順便說一句,這就是首先擁有多個版本的發行版的主要原因。這種情況下的解決方案是將不兼容的庫保留在外部
/usr/lib
,並通過 LD_LIBRARY_PATH 或 chroot 使特定程序可以訪問它們。