这里给你提供一个我的工作笔记【其中glibc的编译安装就是包含在GNU中】:
GNU
gcc
参考链接:
目的用来解决类似这样的问题:
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
也就是系统自带的 libstdc++ 版本过低
## 查看当前可用的 GLIBCXX 版本
strings /usr/lib64/libstdc++.so.6 | grep ^GLIBCXX
解决:编译安装高版本gcc
(潜在问题:产生的文件数量是巨量的 13W+,编译耗时特别长 6核6线程也需要1小时以上)
## 可选:安装编译要用的依赖
yum install texinfo
GCC_VERSION=10.5.0
cd /data-nas/linux/files/download
wget https://mirrors.aliyun.com/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz
tar -zxf gcc-${GCC_VERSION}.tar.gz
mv gcc-${GCC_VERSION} /data-nas/linux/software/_installation_dir/
cd /data-nas/linux/software/_installation_dir/gcc-${GCC_VERSION}
# 这里就是下载4个软件压缩包,国内没找到合适的镜像,可以开代理下载
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/data-nas/linux/software/gcc-${GCC_VERSION} --disable-multilib --enable-languages=all
make -j6
make install
# 最好顺手删掉编译的目录,文件数量太庞大了
rm -rf /data-nas/linux/software/_installation_dir/gcc-${GCC_VERSION}
由于gcc的bin和动态库等文件数量都比较多,而且可能会切换不同版本的gcc,因此本次不考虑做软链到_shortcut,而是直接添加环境变量,编辑 /etc/profile,添加内容如下:
## gcc PATH
GCC_VERSION=10.5.0
PATH=/data-nas/linux/software/gcc-${GCC_VERSION}/bin:$PATH
CPATH=/data-nas/linux/software/gcc-${GCC_VERSION}/include:$CPATH
LIBRARY_PATH=/data-nas/linux/software/gcc-${GCC_VERSION}/lib64:/data-nas/linux/software/gcc-${GCC_VERSION}/lib:$LIBRARY_PATH
LD_LIBRARY_PATH=$LIBRARY_PATH
MANPATH=/data-nas/linux/software/gcc-${GCC_VERSION}/share/man:$MANPATH
unset GCC_VERSION
export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH MANPATH
验证安装:
gcc --version
make
参考链接:
流程:
MAKE_VERSION=4.4.1
cd /data-nas/linux/files/download
wget https://mirrors.aliyun.com/gnu/make/make-${MAKE_VERSION}.tar.gz
tar -zxf make-${MAKE_VERSION}.tar.gz
mv make-${MAKE_VERSION} /data-nas/linux/software/_installation_dir/
cd /data-nas/linux/software/_installation_dir/make-${MAKE_VERSION}
mkdir build && cd build
../configure --prefix=/data-nas/linux/software/make-${MAKE_VERSION}
make -j6
make install
cd /data-nas/linux/software/_shortcut
ln -s /data-nas/linux/software/make-${MAKE_VERSION}/bin/* bin/
ln -s /data-nas/linux/software/make-${MAKE_VERSION}/include/* include/
ln -s /data-nas/linux/software/make-${MAKE_VERSION}/share/man/man1/* share/man/man1/
make --version
glibc
参考链接:
目的用来解决类似这样的问题:
/lib64/libm.so.6: version `GLIBC_2.27' not found
/lib64/libc.so.6: version `GLIBC_2.27' not found
/lib64/libc.so.6: version `GLIBC_2.28' not found
/lib64/libc.so.6: version `GLIBC_2.25' not found
也就是系统自带的 libc 版本过低
## 查看当前glibc版本
ldd --version
## 查看当前可用的 GLIBC 版本
strings /usr/lib64/libc.so.6 | grep ^GLIBC
解决:编译安装高版本glibc
(这里选择了glibc-2.28版本,太新的可能不支持当前的linux环境,但是需要make版本至少4.0)
GLIBC_VERSION=2.28
cd /data-nas/linux/files/download
wget https://mirrors.aliyun.com/gnu/libc/glibc-${GLIBC_VERSION}.tar.gz
tar -zxf glibc-${GLIBC_VERSION}.tar.gz
mv glibc-${GLIBC_VERSION} /data-nas/linux/software/_installation_dir/
cd /data-nas/linux/software/_installation_dir/glibc-${GLIBC_VERSION}
mkdir build && cd build
# 必须显示指定make的路径才能用上非默认位置的make,不过实测这里用太新版本的make-4.4.1会遇到报错 array subscript 1 is outside the bounds of an interior zero-length,因此改用旧版本的gcc编译环境(devtoolset-7)来支持
# MAKE=/data-nas/linux/software/_shortcut/bin/make ../configure --prefix=/data-nas/linux/software/glibc-${GLIBC_VERSION}
scl enable devtoolset-7 bash
GLIBC_VERSION=2.28
cd /data-nas/linux/software/_installation_dir/glibc-${GLIBC_VERSION}/build
../configure --prefix=/data-nas/linux/software/glibc-${GLIBC_VERSION}
make -j6
make install
exit
由于glibc的bin和动态库等文件数量都比较多,而且可能会切换不同版本的glibc,因此本次不考虑做软链到_shortcut,而是直接添加环境变量,编辑 /etc/profile,添加内容如下:
## glibc PATH
# GLIBC_VERSION=2.28
# PATH=/data-nas/linux/software/glibc-${GLIBC_VERSION}/sbin:/data-nas/linux/software/glibc-${GLIBC_VERSION}/bin:$PATH
# CPATH=/data-nas/linux/software/glibc-${GLIBC_VERSION}/include:$CPATH
# LIBRARY_PATH=/data-nas/linux/software/glibc-${GLIBC_VERSION}/lib:$LIBRARY_PATH
# LD_LIBRARY_PATH=$LIBRARY_PATH
# unset GLIBC_VERSION
# export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH
这里实测修改了LD_LIBRARY_PATH之后,很多系统组件都会存在报错。所以还是别添加了,按需使用即可。