glibc是gnu發布的libc庫,即c運行庫。glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc。glibc除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。
wget https://kojipkgs.fedoraproject.org//packages/glibc/2.30.9000/1.fc32/src/glibc-2.30.9000-1.fc32.src.rpm
../configure
make && make install
【Makeconfig:42: *** missing separator. Stop.】【configure: error: you must configure in a separate build directory】解決辦法:
新建一個目錄,然后進入該目錄,用絕對路徑編譯。(一般在解壓目錄新建 ./glibc_build)
【configure: error:
*** These critical programs are missing or too old: compiler
】解決:
更新 gcc
【*** On GNU/Linux systems the GNU C Library should not be installed into
*** /usr/local since this might make your system totally unusable.
*** We strongly advise to use a different prefix. For details read the FAQ.
*** If you really mean to do this, run configure again using the extra
*** parameter `--disable-sanity-checks'.】
出現這個錯誤的原因在於,如果沒指定prefix,則系統把這個程序裝在/usr/local目錄下。但是,c標准庫要求必須安裝在與根文件系統相同的分區中,否則不能用。但是/usr這個掛載點可能處在外部的分區。
解決方法就是指定prefix到/usr,這時候configure程序會自動把必須的內容裝在/lib下(這個目錄肯定與根目錄同分區),擴展內容再裝到/usr/lib下。
【rm -rf /lib64/libc.so.6后出現
ln -s /lib64/libc-2.14.so /lib64/libc.so.6
l error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
】
當出現上面的狀況時候,可以使用以下方法解決(假設libc-2.14.so已經拷貝到/lib64/目錄下,“LD_PRELOAD”是一個環境變量,定義在程序運行前優先加載的動態鏈接庫。):
LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6
當然如果升級失敗,還可以使用下面命令還原至系統升級前的版本libc-2.12.so:
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
或者可以安裝到其他目錄:
../configure --prefix=/opt/glibc
然后通過環境變量來指定glibc
export LD_PRELOAD=/opt/glibc/libc-2.14.so
export LD_LIBRARY_PATH=/opt/glibc/lib