當我嘗試這樣做時,我的系統崩潰了,每個程式都立即出現段錯誤。我相信這是因為它安裝了新版本的ld-linux-x86-64.so.2
in,/lib64
但是當載入程式時,它會找到舊版的libc.so.6
in/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)。
這就是我所做的:
/lib
我備份了、/lib32
、 和的內容/lib64
。我編輯
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
為放置/lib64
在搜尋路徑的頂部。我使用選項配置了新版本的 glibc (2.19),
--prefix=/usr --enable-kernel=2.6.26
以匹配舊的 glibc 版本 (2.13)。我建立了新的 glibc。這事平安無事。
我曾經
su
獲得 root 權限,並運行make install
.它開始安裝,然後在ld-linux-x86-64.so.2
安裝新版本後出現段錯誤,並且仍在拾取舊版本libc.so.6
。為了解決這個問題,我運行了
ldconfig
(當然仍然是 root 身份)。我重新啟動安裝 (
make install
)。它在調用某些命令時再次出錯gcc
。我發現這是因為標頭不匹配:新版本/usr/include/stdio.h
在 處採用舊/usr/include/x86_64-linux-gnu/sys/cdefs.h
版本而不是新版本/usr/include/sys/cdefs.h
。因此,為了解決這個問題,我刪除了目錄
/usr/include/x86_64-linux-gnu/sys
,並將其替換為/usr/include/sys
.我還將標頭a.out.h
、fpu_control.h
和ieee754.h
in替換/usr/include/x86_64-linux-gnu
為 中新版本的符號連結/usr/include
。我再次重新啟動安裝(
make install
)。終於成功了。
重新啟動系統後,一切都處於完美的工作狀態。
我還沒有弄清楚如果我嘗試更新與系統上的 64 位元版本一起安裝的 32 位元版本的 libc,會發生什麼情況。我懷疑它會再次可怕地破壞一切。如果我成功,將會更新這個答案。