Opensuse

glibc 需要作業系統有 2.29,我有 1 個應用程序需要 2.27 max 如何解決,所以兩者都可以工作?

  • April 18, 2019

Opensuse tumbleweed 帶有 glibc2.29,因此系統中的其他所有內容都依賴於它。

但是,我有 CrashPlanDesktop,它最多需要 2.27。

我很容易找到了一個 2.27 的 opensuse repo。

但是,嘗試安裝它會導致:

rpm: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by /usr/lib64/libpopt.so.0)

我該如何解決這個問題?

CrashPlanDesktop 必須與服務通信。

我可以使用 chroot 或其他東西嗎?

我可以將 rpm 提取到包含執行檔的文件夾中嗎?

另外我收到了這條消息,但不知道它是什麼意思

程式碼:d6 21 12 e3 c4 a7 81 1d 7a 48 5f 26 5f 37 b8 f1 ed f5 f8 7c 86 e8 25 4c a5 5a 29 b7 45 41 0c cc a7 76 95 b4 93 d9 d8 5e 4c b8 f4 95 11 c4 9f fc 6d a0 1d 3c 50 4a e0 5a 6b 48 18 f7 b9 ab

實際上,我能夠解決這個下載 Electron 2.0.8、從存檔中提取 libnode.so 並將 /usr/local/crashplan/electron/libnode.so 替換為 electron 2.0.8 zip 中的問題的問題。

我的系統是 Debian,但我想這也可能適用於 OpenSuse。

(這當然是非官方的,不受 Code42 或其他任何人的支持)

glibc 是向後兼容的,因此為在 glibc 2.27 上工作而建構的程式碼應該在 glibc 2.29 上繼續工作。

為了實現向後兼容,glibc 使用符號版本控制來標記何時引入函式。如果一個函式改變了行為(特別是當它改變原型時),將為該版本引入一個新的符號版本。但是使用舊 glibc 建構的程式碼(取決於舊行為)仍將綁定到具有舊行為的舊符號版本。

大多數 Linux 發行版並不真正支持並行安裝多個 glibc 版本,因為它們必須安裝在包含完整版本的路徑中(庫本身的名稱,稱為“SONAME”,對於所有 glibc 版本都是相同的,所以不能單獨使用來區分它們。)但是在決定哪個二進製文件使用哪個二進製文件時存在問題。因此,每個庫版本都需要單獨的載入器(動態連結器),但是在為每個版本建構二進製文件時需要設置解釋器(或在現有二進製文件上修補解釋器)。簡而言之,可以安裝多個版本的glibc,但它是一個複雜的設置,使用起來真的很痛苦。

如果您的應用程序確實需要 glibc 2.27 並且不適用於 glibc 2.29(但是,如上所述,這應該可以工作,因此這將是 glibc 2.29 中的一個錯誤),那麼您最好的選擇是在 Linux 發行版上執行它預設提供 glibc 2.27。

如果無法更改主機的 Linux 發行版,請考慮在容器中執行您的應用程序,並從具有適當 glibc 版本的發行版建構容器映像。

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