Centos7 升级 Glibc-2.28
安装 glibc-2.28
# 下载并解压 glibc-2.28 $ wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz $ tar -xzvf glibc-2.28.tar.gz $ cd glibc-2.28 # 创建临时文件 $ mkdir build && cd build $ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# 这一步时, 发生了错误, 提示大致为 These critical programs are missing or too old: make compiler
升级gcc与make
安装GLIBC所需的依赖 可以在 glibc 目录下的INSTALL中找到, 该版本需要 GCC 4.9 以上 及 make 4.0 以上
升级gcc
1、wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.bz2
2、下载好之后,解压文件:tar -jxvf gcc-4.9.0.tar.bz2
3、解压完成,进入文件目录:cd gcc-4.9.0
4、利用源码包里自带的工具下载所需要的依赖项:./contrib/download_prerequisites //注意路径
5、创建编译输出目录(自定):mkdir build
6、进入输出目录:cd build;
7、生成Makefile:../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
8、编译:make -j4 //选项 -j4 是多核编译
9、编译完成后,安装:make install
10、检查一下是否安装成功:gcc -v //查看gcc版本
问题1:内存不足
1.查看系统是否已经设置了swap交换文件(交换分区)
swapon -s
如果什么也没有就退出了,表面没有设置任何交换文件(分区)。
2.查看内存大小
free -m
看到内存大小,来确定交换文件的大小,建议值是内存的2-4倍。当然这只是建议值,你可以根据情况来选择。
3.查看磁盘大小
df -h
看看磁盘容量,来确定到底设置多大的交换文件比较好。
4.创建交换文件
dd if=/dev/zero of=/swapfile bs=4096 count=512k
5.设置文件的权限
6.设置交换文件,将swapfile指定为交换文件
mkswap /swapfile
7.启动交换文件
swapon /swapfile
8.查看交换文件设置情况
swapon -s
9.再使用free确认一遍
free
10.如果不再需要了,可以关闭
swapoff /swapfile
升级 make
$ wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz $ tar -xzvf make-4.3.tar.gz $ cd make-4.3/ # 安装到指定目录 $ ./configure --prefix=/usr/local/make $ make $ make install # 创建软链接 $ cd /usr/bin/ $ mv make make.bak # backup $ ln -sv /usr/local/make/bin/make /usr/bin/make
继续编译 glibc
# 进入之前的 `~/glibc-2.28/build`目录下 $ cd /root/glibc-2.28/build $ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin $ make $ make install # 查询 $ strings /lib64/libc.so.6 | grep GLIBC ... GLIBC_2.22 GLIBC_2.23 GLIBC_2.24 GLIBC_2.25 GLIBC_2.26 GLIBC_2.27 GLIBC_2.28 GLIBC_PRIVATE ...
问题2:/usr/bin/ld: cannot find -lnss_test2
#add $name ne “nss_test2” vim glibc-2.28/scripts/test-installation.pl next if ($build_mathvec == 0 && $name eq "mvec"); if ($name ne "nss_ldap" && $name ne "db1" && $name ne "thread_db" && $name ne "nss_test1" && $name ne "nss_test2" && $name ne "libgcc_s") {
问题3:undefined reference to ‘_nsl_default_nss@GLIBC_PRIVATE’
#add --enable-obsolete-nsl ../configure --prefix=/root/glibc_build --with-headers=/usr/include --with-binutils=/usr/bin --enable-obsolete-nsl