学生版 ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by /home
非常感谢此帖子:https://blog.csdn.net/phdsky/article/details/84104769
此贴给的不是方法,而是刨根究底原因在哪。比那些上来就先xx再xx然后xx的好得多,真yue了。
思路
所以,问题的根本原因是linux的某个动态链接库是版本不行。要么你更换版本,要么找一个别的so重新链接到这个连接上。
我这里就直接方便点,重新找这个so文件链接好的,版本够的,找一个就行了,不需要root权限。
那显然linux有一个环境变量叫做LD_LIBRARY_PATH
是专门给动态链接库的路径的。只要在此路径下发现libstdc++.so.6
,此问题就解决了。
需求
我看不少人直接修改系统的bashrc或者bash profile,此种方式是不符合我的需求的。我相信大部分学校学生都是多人多用户公用一个服务器,没有root是没法改动这些的。
另外结合自己也再用conda环境,我想要的是什么呢?我只想改动我这个虚拟环境的东西,不想影响别人。
解决
两种方法都需要找到libstdc++.so.6在哪里有,一般linux中都会有这个。因为gcc版本可以共存,往往有个版本是有这个动态链接库的。
用此全局搜索:
sudo find / -name "libstdc++.so.6*"
2024.1.30加更 =====
使用这个直接扔掉permission denied输出
find / -name "libstdc.so.6*" 2>/dev/null
但根据我的经验,大部分自己的conda环境内早就有这个so了。
找到so文件后,用ls -al /usr/lib64/libc.so.6
查看下so的version跟GLIBC_xxx后面的version是否对应。
于是我选用了这个路径下的libstdc++:/home/my_name/.conda/envs/torch190cu102py38/lib/libstdc++.so.6
可以看到,这是一个conda环境下的动态链接库,我只要把他的前缀/home/my_name/.conda/envs/torch190cu102py38/lib/
加到环境变量里面就可以了。
解决方法按照两种情况给出来。
- 学生多人公用服务器版
conda中有一个工具叫做conda env
,使用此可以只改动自己虚拟环境的环境变量,当切换其他环境后此环境变量会自动取消。
于是在自己想在的虚拟环境中打入:
我专门给我这个虚拟环境加了一个环境变量,此环境变量目录下有libstdc++.so.6,再次使用此虚拟环境运行我的程序,已经不会出现标题错误了。conda env config vars set LD_LIBRARY_PATH="/home/my_name/.conda/envs/torch190cu102py38/lib/"
此符合我的需求。
另:- 查看当前添加了的路径:
conda env config vars list
- 取消
conda env config vars unset 变量的名字
- 查看当前添加了的路径:
- 个人版
如果你是root,或者自用的系统,可直接在系统的/etc/bashrc(centos)或者/etc/profile中的LD_LIBRARY_PATH
直接添加"某个路径"
就可以。假设里面原来没有,那就直接写上LD_LIBRARY_PATH="某个路径"
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人