Centos7 升级 Glibc-2.28

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年7月13日 (四) 15:12的版本 →‎继续编译 glibc
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

安装 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=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --enable-obsolete-nsl