赞
踩
在利用实验室中的服务器中运行代码时,因libstdc++.so.6版本问题产生报错信息如下:
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/{用户名}/anaconda3/envs/torch/lib/python3.8/site-packages/matplotlib/_path.cpython-38-x86_64-linux-gnu.so)
①使用下述命令查看/usr/lib/x86_64-linux-gnu/libstdc++.so.6对应的软连接信息,发现其指向版本为6.0.25。
- cd /usr/lib/x86_64-linux-gnu/
- ls -l libstdc++.so*
②使用下述命令查看libstdc++.so.6链接包含的动态库,发现确实未包含GLIBCXX_3.4.29:
strings libstdc++.so.6 | grep GLIBCXX
查阅网上相关解决资料,发现解决方法大多需要将/usr/lib/x86_64-linux-gnu/libstdc++.so.6下对应的软连接进行修改替换。但由于使用实验室的服务器时不具有root权限,无法进行替换,因此考虑指定加载库的路径。
①检查服务器中是否有包含GLIBCXX_3.4.29的libstdc++.so.6版本(最好是自己用户名下)
find /home/{自己用户名} -name libstdc++.so.6*
注:这里find后面的路径一般是根据自己服务器中,用户文件所在路径进行修改,我的所有文件都在/home/{自己用户名}这个目录下
发现两个版本,因为我这里使用torch环境,所以查看第二个动态链接库/home/{用户名}/anaconda3/envs/torch/lib/libstdc++.so.6中是否包含GLIBCXX_3.4.29,输入命令:
strings /home/{用户名}/anaconda3/envs/torch/lib/libstdc++.so.6 | grep GLIBCXX
②指定加载库的路径
根据我们上面找到的路径:/home/{用户名}/anaconda3/envs/torch/lib/libstdc++.so.6。我们直接在终端中修改指定加载库的路径:
export LD_LIBRARY_PATH=/home/{用户名}/anaconda3/envs/torch/lib
(评论区朋友的补充~)这一步运行如果不行的话,可以在该条命令后加上:$LD_LIBRARY_PATH,即:
export LD_LIBRARY_PATH=/home/{用户名}/anaconda3/envs/torch/lib:$LD_LIBRARY_PATH
再次运行,发现问题解决,可以成功运行!
2023年12月11日补充
到上面这一步其实就可以结束啦,下面是为了解决一个“一劳永逸的问题”,当然,大家如果觉得这一步较麻烦(虽然我觉得不麻烦^-^),又不想每一次重启终端都输一下上面这条命令,也可以直接把export命令写入到自己的脚本里面,那每一次运行也是不需要自己单独再输入这条命令啦~
在发布这篇文章后,评论区有好多朋友都问“做法是不是一次性的”。我的回答是,运行完第二部分的内容,确实在重启终端后,确实要重新建立链接,即每一次打开终端都需要重新运行上述export命令。
看到大家问有没有“一劳永逸”的方法,所以我也一直有在留意着~恰好近期实验室服务器更新需要重新配置,配置过程中我终于发现了一种方法可以解决“一次性”的问题,因此在这里进行更新,希望能够分享给大家。(也许会有更好的方法,也超级欢迎大家的补充~)
这一部分的内容主要为了能在重启终端后无需重新运行export命令。
①编辑~/.bashrc文件
我的方法就是直接将其加入系统路径。首先在终端中输入下面的命令
vim ~/.bashrc
②加入系统路径
进入文件后把第二部分最后一条export命令写入这一位置。
export LD_LIBRARY_PATH=/home/{用户名}/anaconda3/envs/torch/lib
③更新配置文件
输入下述命令更新配置文件:
source ~/.bashrc
此时,当我们每次重新启动终端,就不需要每次都输入命令,也不会再报前面的错误了~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。