Centos7解决 Error:libstdc++.so.6中version 'CXXABI_1.3.9' not found 错误


在 centos7 系统运行 node-canvas 时报了Error: /usr/lib64/libstdc++.so.6: version 'CXXABI_1.3.9' not found错误,经历各种搜索,最后终于解决能用了

文件覆盖方案

1、下载新版本的 libstdc++.so.6 文件
点此下载,这个文件是从gcc v8.5.0的系统扒下来的,下载后上传到/usr/lib64 文件夹,然后执行下面的命令

1
2
3
cd /usr/lib64
rm -rf ./libstdc++.so.6 #删除原有的,正常来讲是个软链接,如果不是请备份好
ln -s libstdc++.so.6.0.25 libstdc++.so.6

这个时候运行相关命令,如pm2会报/lib64/libc.so.6: version 'GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)"的错误,这时候请进行第二步

2、编译GLIBC_2.18

1
2
3
4
5
6
7
8
9
screen -S glibc
curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2 #执行这一步时耗时比较久,可以输入`Ctrl+a`然后再按`d`退出screen界面让它在后台执行
make install

当以上命令执行完时,没有意外的话应该就可以用了
参考:https://www.cnblogs.com/astonc/p/16660844.html

编译 gcc 方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
screen -U -S gcc
wget http://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-7.3.0/gcc-7.3.0.tar.gz
tar zxf gcc-7.3.0.tar.gz
cd gcc-7.3.0
yum -y install bzip2
./contrib/download_prerequisites
./configure --disable-multilib --enable-languages=c,c++
make -j 4
make install
find / -name "libstdc++.so.*"
cp /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64/
cd /usr/lib64/
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.24 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

参考:https://azdigi.com/blog/en/webserver-panel-en/directadmin-en/fix-the-error-cxxabi-1-3-9-not-found-on-centos-7-running-directadmin/