Package-Management

為什麼 XXX-dev(或 XXX-devel)的原始碼沒有分發?

  • March 30, 2021

當我嘗試在舊的 Linux 伺服器上安裝最新版本的軟體時(我沒有 root 權限),有時需要包 XXX-dev 或 XXX-devel,其中 XXX 是某個庫的名稱。例如,在 CentOS 中安裝 Python 3.7.4 需要預先安裝 libffi-devel。yum通過or安裝 XXX-devapt需要 root 權限。分發 XXX 和 XXX-dev 的原始碼聽起來是讓普通使用者輕鬆安裝各種軟體的好方法。

所以,我的問題是為什麼 XXX-dev 的原始碼沒有分發?有正當理由嗎?

為什麼 XXX-dev 的原始碼沒有分發?

因為您不需要或不想編譯您在編譯時使用的每個庫,例如 Python 的 ffi 程式碼。您想使用共享對象文件(Windows 的等價物是 DLL)來動態連結到您想要的庫。正如另一個答案所暗示的那樣,原始碼實際上是可用的。但這不是建構 Python 的 ffi 所需要的。您需要標頭共享對象文件

yum通過or安裝 XXX-devapt需要 root 權限。

這不是因為他們不安裝原始碼;這是因為它們在系統級別執行。您不需要安裝原始碼,但您需要提供以下內容:

  • XXX,為庫編譯的共享目標文件
  • XXX-dev,在庫中定義函式的原始碼,以便它們可以在您的程式碼中使用,但動態連結。

它們不必位於根擁有的位置,但它們確實需要位於您的編譯器/連結器/建構工具鏈可以找到的位置。無論您是否從原始碼建構它們都是如此。但是,將建構過程的所有小工具設置為恰到好處並非易事,這就是發行版為您做這件事的原因。

不幸的是,這是 Python 的常見場景,它大量借鑒了 C 語言,但依靠作業系統提供這些庫作為標準建構過程的一部分。可能有可能說服 Python 在使用者擁有的位置使用建構組件。我不知道怎麼做。我將建議您不要將其作為您的目標,而是找到一種方法來解決“您需要安裝庫並且沒有權限”的問題:

  • 容器技術允許程序使用不同的使用者空間文件系統,但您的管理員可能不願意為您提供該訪問權限
  • 要求您的管理員安裝您需要的每個軟體包
  • 使用不同的系統進行開發,您可以在其上安裝所需的軟體包
  • 使用與系統庫有更健全關係的語言(Golang 通常不會遇到這個問題,因為它的庫通常作為 Golang 源分發,並且整個建構過程更現代,並且無需 root 權限即可工作)

引用自:https://unix.stackexchange.com/questions/545138