Linux系统下解决 ImportError:‘GLIBCXX_3.4.21‘ not found 的错误

忙里偷闲,随便写写。

在代码运行的时候可能会出现一下错误:

ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /data10/gaoxl/install/anaconda3/envs/paddle37/lib/python3.7/site-packages/scipy/_lib/_uarray/_uarray.cpython-37m-x86_64-linux-gnu.so)

这是因为Linux系统中,glibc版本较低 ,那怎么解决这个问题呢?

1.首先你需要解决的一件事情是:“用户名不在sudoers中”的问题,这是一开始的拦路虎,因为你会发现,没有这个权限你将无法操作以下的步骤。那怎么解决“用户名不在sudoers中”的问题呢?方法是:

①在终端输入命令:su root    # 先切换到 root 用户

②继续输入命令:gedit /etc/sudoers  # 打开权限文件

③在跳出来的 /etc/sudoers 文件中找到Allow root to run any commands anywhere,在其下方添加命令:

root    ALL=(ALL)    ALL

zjl    ALL=(ALL)   ALL 

④保存退出 root 用户

这样,你就把自己的用户名写进了 sudoers

2.查找所有gcc动态库,找到anaconda,在终端输入命令:

find / -name "libstdc++.so*"

你会发现没有 GLIBCXX_3.4.21 在输出的结果中找到:

/home/zjl/anaconda3/lib/libstdc++.so.6
/home/zjl/anaconda3/lib/libstdc++.so.6.0.28
/home/zjl/anaconda3/lib/libstdc++.so

将上面的最新动态库libstdc++.so.6.0.28复制到/usr/lib64目录下: 

sudo cp /home/zjl/anaconda3/lib/libstdc++.so.6.0.28 /usr/lib64/

进入目录/usr/lib64 

cd /usr/lib64
ll | grep libstdc

备份,输入命令:

sudo mv libstdc++.so.6 libstdc++.so.6.bak

 创建新的软连接,指向刚拷贝的库:

sudo ln -s libstdc++.so.6.0.28 libstdc++.so.6

重新运行检查动态库的命令:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

 大功告成!!

注意:Linux如何建立和删除软连接呢?

建立:ln -s 源文件 目标文件

例如:ln -s libstdc++.so.6.0.28  libstdc++.so.6

删除:rm -rf 目标文件

例如:rm -rf  libstdc++.so.6

如果是:rm -rf 源文件/ 会把整个目录都删了


版权声明:本文为m0_57541899原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。