一、问题:
今天在安装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那边的连接里面建一个软链即可