在 Debian(64 位元)上,如何安裝從原始碼建置的 glibc?

在 Debian(64 位元)上,如何安裝從原始碼建置的 glibc?

當我嘗試這樣做時,我的系統崩潰了,每個程式都立即出現段錯誤。我相信這是因為它安裝了新版本的ld-linux-x86-64.so.2in,/lib64但是當載入程式時,它會找到舊版的libc.so.6in/lib/x86_64-linux-gnu而不是新版的/lib64。 (顯然 ld 和 libc 必須匹配?)

我嘗試將其放在/lib64頂部/etc/ld.so.conf.d/x86_64-linux-gnu.conf然後運行ldconfig。然而,由於某種原因,這並沒有解決任何問題。

答案1

在搜尋不相關的內容時,我偶然發現了為什麼我的安裝會選擇舊的 libc:因為新的 libc 有一個舊的 ABI 版本(https://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so)。

這就是我所做的:

  1. /lib我備份了、/lib32、 和的內容/lib64

  2. 我編輯/etc/ld.so.conf.d/x86_64-linux-gnu.conf為放置/lib64在搜尋路徑的頂部。

  3. 我使用選項配置了新版本的 glibc (2.19),--prefix=/usr --enable-kernel=2.6.26以匹配舊的 glibc 版本 (2.13)。

  4. 我建立了新的 glibc。這事平安無事。

  5. 我曾經su獲得 root 權限,並運行make install.它開始安裝,然後在ld-linux-x86-64.so.2安裝新版本後出現段錯誤,並且仍在拾取舊版本libc.so.6

  6. 為了解決這個問題,我運行了ldconfig(當然仍然是 root 身份)。

  7. 我重新啟動安裝 ( make install)。它在調用某些命令時再次出錯gcc。我發現這是因為標頭不匹配:新版本/usr/include/stdio.h在 處採用舊/usr/include/x86_64-linux-gnu/sys/cdefs.h版本而不是新版本/usr/include/sys/cdefs.h

  8. 因此,為了解決這個問題,我刪除了目錄/usr/include/x86_64-linux-gnu/sys,並將其替換為/usr/include/sys.我還將標頭a.out.hfpu_control.hieee754.hin替換/usr/include/x86_64-linux-gnu為 中新版本的符號連結/usr/include

  9. 我再次重新啟動安裝(make install)。終於成功了。

重新啟動系統後,一切都處於完美的工作狀態。

我還沒有弄清楚如果我嘗試更新與系統上的 64 位元版本一起安裝的 32 位元版本的 libc,會發生什麼情況。我懷疑它會再次可怕地破壞一切。如果我成功,將會更新這個答案。

相關內容