抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

centos系统升级glibc编译

centOS系统总有机会碰到glibc版本过低的报错,为此,这个教程也记录我解决的这个问题的坑。我在安装好nodejs后,使用npm报错,glibc版本过低

image-20250502203608864

我查了网上不少资料,下了很多版本的包,尝试了很多次,最终找到这个博主的教程参考解决了这个问题

各个版本的glibc地址:https://ftp.gnu.org/gnu/glibc/

找到需要的版本,复制下载链接,使用wget下载(我的是最高需要2.28)

1
2
3
4
5
6
7
8
cd /opt
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
#解压
tar xvf glibc-2.28.tar.gz
#创建build文件夹
cd glibc-2.28/ && mkdir build && cd build
#编译
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

编译报错,提示make版本太老,升级make

image-20250502204347097

1
2
3
4
#错误提示没有python
yum install -y python3
#需要给make和gcc升个级,添加一个CentOS-SCLo-rh.repo仓库源,用于下载gcc需要的包
vim /etc/yum.repos.d/CentOS-SCLo-rh.repo
复制这里的内容到CentOS-SCLo-rh.repo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# CentOS-SCLo-rh.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://mirrors.aliyun.com/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://mirrors.aliyun.com/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

注意,如果/etc/yum.repos.d下存在其他SCLo的仓库源,可以改名后面加个.bak,避免冲突

1
2
3
#更新源
sudo yum clean all
sudo yum makecache

安装gcc及其依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
# 升级GCC(默认为4 升级为8)</span>
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*
#存放到自定义的路径,通过添加环境变量来使用新版本的gcc
mkdir -p /opt/custom-bin
ln -s /opt/rh/devtoolset-8/root/bin/gcc /opt/custom-bin/gcc
ln -s /opt/rh/devtoolset-8/root/bin/g++ /opt/custom-bin/g++
#添加环境变量
echo 'export PATH=/opt/custom-bin:$PATH' >> ~/.bashrc
source ~/.bashrc

#查看gcc版本:8
gcc -v

安装make

1
2
3
4
5
6
7
8
9
10
11
# 升级 make(默认为3 升级为4)
cd /opt
wget http://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
ln -sv /usr/local/make/bin/make /usr/bin/make

#查看make版本
make -v

继续更新glibc

1
2
cd /opt/glibc-2.28/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

编译完成使用make安装,安装时间比较久

1
make && make install

处理lib库报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#在查看npm命令还存在lib库的报错
npm -v
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

#使用之前安装gcc的lib库替换node需要的库
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26 --no-check-certificate
#创建一个目录存放位置
mkdir /opt/lib64.so && /opt/lib64.so
#在该位置创建一个软连接,名字为libstdc++.so.6,系统使用的名字默认为这个
sudo ln -sf libstdc++.so.6.0.26 libstdc++.so.6
#编辑单用户的环境变量文件
vim ~/.bashrc
#添加新的lib64环境变量
export LD_LIBRARY_PATH=/opt/lib64.so:$LD_LIBRARY_PATH
source ~/.bashrc
#查看是否正常使用npm
npm -v

评论