好久之前花了一週琢磨出來的方法,最近看同事對於升級gcc、glibc需求挺頻繁的,就發出來,供有須要的同窗參考一下。html
因爲在升級過程當中可能會出現各類問題,因此只供參考只供參考只供參考,遇到不同的報錯還須要根據報的錯誤具體分析,另外多開幾個窗口,glibc安裝過程當中當前窗口會掛掉,須要在其它窗口操做linux
友情提示:升級glibc是個痛苦的過程,請作好內心準備。最好先在虛擬機中試驗,每步作好快照。祝順!c++
升級的過程是先升級gcc再升級glibcide
參考文檔:ui
http://blog.csdn.net/u011271038/article/details/12946661google
http://www.linuxfromscratch.org/lfs/view/stable/chapter06/glibc.htmlspa
爲防止升級glibc失敗,備份好系統庫,失敗後能夠將備份的目錄拷回來。恢復系統(rescue or將盤掛到別的機器).net
需備分的目錄:/lib,/usr/lib,/usr/include,/usr/sbin和/usr/bin,/lib64 ,/usr/lib64/orm
因爲在集羣上的ld都是2.20版 本。在glibc configure的時候會報version of ld... 2.20.51.0.2, bad 因此要先升級ldhtm
/global/share/binutils-2.26.tar.gz
[root@test binutils-2.26]# ./configure --prefix=/usr --enable-ld
make
make instlal
確認版本升級成功
[root@test binutils-2.26]# ld -v
GNU ld (GNU Binutils) 2.26.20160125
安裝gcc
由於集羣上的gcc是4.4版本,因此也要升級。安裝glibc時報錯 checking if gcc is sufficient to build libc... no checking for nm... nm configure: error: *** These critical programs are missing or too old: compiler *** Check the INSTALL file for required versions.
/global/share/gcc-4.9.0-full.tar.gz (因集羣上不能×××,將升級gcc所需的mpfr、mpc、gmp、isl、cloog tar包已經打包進去)
sh -x ./contrib/download_prerequisites(腳本中已經註釋掉wget過程,解壓mpfr、mpc、gmp、isl、cloog,作軟鏈)
cd ..
mkdir objdir
cd objdir
../gcc-4.9.0-full/configure --prefix=/usr --enable-languages=c,c++,fortran,go --disable-multilib(注意這裏指定的--prefix=/usr,好多同窗都選擇默認安裝到/usr/bin/local下,形成失敗 。另外make時間較長,建議開screen執行)
make
make install
安裝完成後,查看gcc版本已經變成4.9
安裝glibc
tar -zxf /global/share/glibc-2.23.tar.gz
cd glibc-2.23
mkdir build
../configure --prefix=/usr --disable-profile --enable-kernel=2.6.32 --enable-obsolete-rpc
make
make install
會跳出錯誤(我碰到是這樣的錯誤,還有多是其它的錯誤,具體錯誤具體分析,但我認爲這些問題,基本上就是由於升級後由於軟鏈的版本不對所形成的)
gawk: error while loading shared libraries: /lib64/libm.so.6: invalid ELF header
make[2]: *** [/disk1/software/gcc/glibc-2.23/build/math/stubs] Error 127
make[2]: Leaving directory `/disk1/software/gcc/glibc-2.23/math'
make[1]: *** [math/subdir_install] Error 2
make[1]: Leaving directory `/disk1/software/gcc/glibc-2.23'
make: *** [install] Error 2
發現錯誤後,google了一圈,沒有找到相關的。就自已分析了一下,先cat了一下/lib64/libm.so.6發現了以下的內容:
/* GNU ld script*/OUTPUT_FORMAT(elf64-x86-64)GROUP ( /lib64/libm.so.6 AS_NEEDED ( /usr/lib64/libmvec_nonshared.a /lib64/libmvec.so.1 ) )
這個內容和正常的是不同的。並且是link到老的libm-2.12.so版本,ls grep了一下libm相關的文件,發現有新的libm-2.23.so文件生成,這個時候更改了一下軟鏈:
unlink libm.so.6
ln -s libm-2.23.so libm.so.6 (在另外的窗口中作的操做,make install的窗口已經不動了)
繼續make install
最後出來:Your new glibc installation seems to be ok.
升級成功。