搞定libstdc++.so.6 version GLIBCXX_3.4.21 not found

一、问题:

今天在安装whisper的时候,突然间报了这样一个错误:

OSError: Could not load shared object file: libllvmlite.so
Errors were: [OSError("/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 
(required by /opt/conda3/lib/python3.9/site-packages/llvmlite/binding/libllvmlite.so)"), OSError('libllvmlite.so: cannot open shared object file: No such file or directory'), OSError('./libllvmlite.so: cannot open shared object file: No such file or directory'), OSError("/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 
(required by /opt/conda3/lib/python3.9/site-packages/llvmlite/binding/libllvmlite.so)")]

二、原因

1、调用的高版本的gcc,生成的动态库没有替换老版本gcc的动态库

三、解决方案

1、查看libstdc++.so.6支持版本

(base) [root@comm-agi lib64]# strings /lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19

从上面可以看出来:gcc的动态库没有3.4.21版本的

2、找到一个高版本的动态库文件,然后复制到/lib64目录下面

2.1、你可以从网上下载,也可以从本地找

2.2、先看看原来的版本:在/lib64目录下面输入:ll|grep libstdc++.so.6

看红色箭头的位置,原来的版本是6.0.19

2.3、直接在本地找一个高版本的,输入命令:

(base) [root@ lib64]# find / -name "libstdc++.so.6.0*"

搜索结果显示:

/usr/lib/libstdc++.so.6.0.19
/usr/lib64/libstdc++.so.6.0.19
/usr/lib64/libstdc++.so.6.0.28

2.4、于是我就把6.0.28复制到了/lib64目录下面:cp /usr/lib64/libstdc++.so.6.0.28 /lib64

2.5、删除原来的软链:rm /lib64/libstdc++.so.6 

2.6、新建软链:ln -s /lib64/libstdc++.so.6.0.28 /lib64/libstdc++.so.6

(base) [root@ lib64]# ll|grep libstdc++.so.6
lrwxrwxrwx   1 root root        30 Aug 10 17:26 libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.28
-rwxr-xr-x   1 root root    995840 Sep 30  2020 libstdc++.so.6.0.19
-rwxr-xr-x   1 root root  13121976 Aug 10 17:15 libstdc++.so.6.0.28

到此就搞定了。不过我觉得其实可以不用复制到/lib64目录下面。直接从2.3那边的连接里面建一个软链即可

猜你喜欢

转载自blog.csdn.net/duzm200542901104/article/details/132218862