好久之前花了一周琢磨出来的方法,最近看同事对于升级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.
升级成功。