gcc glibc升级

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc glibc升级相关的知识,希望对你有一定的参考价值。

很久以前花了一周琢磨出来的方法,最近看同事对于升级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

[[email protected] binutils-2.26]# ./configure --prefix=/usr --enable-ld

make

make instlal

确认版本升级成功

[[email protected] 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

以上是关于gcc glibc升级的主要内容,如果未能解决你的问题,请参考以下文章

Linux升级gcc

centos环境升级glibc到2.17及过程中遇到的问题

centos7安装升级gcc8.3.0版本

glibc和libc到底有啥区别?

gcc 10.2.0编译glibc2.25出现错误

高版本gcc编译出的程序在低版本glibc机器上运行