学生版 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/加到环境变量里面就可以了。
解决方法按照两种情况给出来。

  1. 学生多人公用服务器版
    conda中有一个工具叫做conda env,使用此可以只改动自己虚拟环境的环境变量,当切换其他环境后此环境变量会自动取消。
    于是在自己想在的虚拟环境中打入:
    conda env config vars set LD_LIBRARY_PATH="/home/my_name/.conda/envs/torch190cu102py38/lib/"
    
    我专门给我这个虚拟环境加了一个环境变量,此环境变量目录下有libstdc++.so.6,再次使用此虚拟环境运行我的程序,已经不会出现标题错误了。
    此符合我的需求。
    另:
    • 查看当前添加了的路径:conda env config vars list
    • 取消 conda env config vars unset 变量的名字
  2. 个人版
    如果你是root,或者自用的系统,可直接在系统的/etc/bashrc(centos)或者/etc/profile中的LD_LIBRARY_PATH直接添加"某个路径"就可以。假设里面原来没有,那就直接写上LD_LIBRARY_PATH="某个路径"
posted @   ZephyrYin  阅读(10)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示