很久以前花了一周琢磨出来的方法,最近看同事对于升级gcc、glibc需求挺频繁的,就发出来,供有需要的同学参考一下。
由于在升级过程中可能会出现各种问题,所以只供参考只供参考只供参考,遇到不一样的报错还需要根据报的错误具体分析,另外多开几个窗口,glibc安装过程中当前窗口会挂掉,需要在其它窗口操作
友情提示:升级glibc是个痛苦的过程,请做好心里准备。最好先在虚拟机中试验,每步做好快照。祝顺!
升级的过程是先升级gcc再升级glibc
参考文档:
http://blog.csdn.net/u011271038/article/details/12946661
http://www.linuxfromscratch.org/lfs/view/stable/chapter06/glibc.html
为防止升级glibc失败,备份好系统库,失败后可以将备份的目录拷回来。恢复系统(rescue or将盘挂到别的机器)
需备分的目录:/lib,/usr/lib,/usr/include,/usr/sbin和/usr/bin,/lib64 ,/usr/lib64/
由于在集群上的ld都是2.20版 本。在glibc configure的时候会报version of ld... 2.20.51.0.2, bad 所以要先升级ld
/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.
升级成功。
本文出自 “云湖月天” 博客,请务必保留此出处http://yunhuyuetian.blog.51cto.com/2819759/1907619
原文地址:http://yunhuyuetian.blog.51cto.com/2819759/1907619