参考文章:
https://blog.csdn.net/zhu_charles/article/details/75914060
================================================
在anaconda中安装deepmind_lab模块,安装过程并没有报错,运行代码时报错:
具体错误信息:
/home/devil/anaconda3/envs/impala/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libLLVM-13.so.1)
根据错误信息可以知道运行时调用C++标准库报错,显示的被调用的C++标准库地址为:
/home/devil/anaconda3/envs/impala/lib/libstdc++.so.6
也就是说在anaconda创建的python环境中默认调用的库地址首先是自身环境的lib路径,那么我们可以看看在当前系统中一共有多少个C++标准库libstdc++.so.6文件:
sudo find / -name libstdc++.so.6
可以看到系统中C++标准库libstdc++.so.6文件有多个,基本是每个独立性较高的程序都在自己的环境路径下有个libstdc++.so.6文件,所以这样是因为不同的libstdc++.so.6文件可能内部的GLIBCXX版本并不相同,因此一些不需要从源码编译的软件就会采用这种方式,把符合自身版本需要的libstdc++.so.6文件放在自身的库路径下,这样在调用的时候会优先调用自身带有的libstdc++.so.6文件而不是系统自带的。
我们可以看下系统libstdc++.so.6文件中支持的GLIBCXX版本:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
我们再看下anaconda环境下libstdc++.so.6文件中支持的GLIBCXX版本:
strings /home/devil/anaconda3/envs/impala/lib/libstdc++.so.6 | grep GLIBC
可以看到系统环境下 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 文件含有GLIBCXX_3.4.30版本,而anaconda环境下/usr/lib/x86_64-linux-gnu/libstdc++.so.6文件含有的最高版本为GLIBCXX_3.4.29,因此有了前面的报错。
查看anaconda环境下libstdc++.so.6的相关文件:
系统库路径下,libstdc++.so.6的相关文件:
可以看到我们只需要将anaconda环境中libstdc++.so和libstdc++.so.6的链接地址指向系统路径中的地址即可:
===================================================
再次运行:
不再报错,已经修复成功。
=============================================