conda环境下“/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20‘ not found”问题解决

文章描述了一个在conda环境下运行Python程序时遇到的错误,该错误由于系统缺少GLIBCXX_3.4.20版本的libstdc++.so.6导致。作者通过检查GLIBCXX的版本,发现系统中没有该版本。然后,作者通过查找conda环境中的高版本库,将其复制到系统路径并创建软链接,成功解决了问题。此外,文章还介绍了conda环境管理器的基本功能和优势,以及如何创建和管理环境。

1 conda环境下运行python程序报错

conda环境下运行python所报的错误信息如下:

Traceback (most recent call last):
  File "/opt/faceswap/lib/cli/launcher.py", line 229, in execute_script
    process = script(arguments)
  File "/opt/faceswap/scripts/extract.py", line 61, in __init__
    self._extractor = Extractor(self._args.detector,
  File "/opt/faceswap/plugins/extract/pipeline.py", line 135, in __init__
    self._detect = self._load_detect(detector, rotate_images, min_size, configfile)
  File "/opt/faceswap/plugins/extract/pipeline.py", line 637, in _load_detect
    plugin = PluginLoader.get_detector(detector_name)(exclude_gpus=self._exclude_gpus,
  File "/opt/faceswap/plugins/plugin_loader.py", line 55, in get_detector
    return PluginLoader._import("extract.detect", name, disable_logging)
  File "/opt/faceswap/plugins/plugin_loader.py", line 197, in _import
    module = import_module(mod)
  File "/root/anaconda3/envs/faceswap/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/opt/faceswap/plugins/extract/detect/s3fd.py", line 11, in <module>
    from scipy.special import logsumexp
  File "/root/anaconda3/envs/faceswap/lib/python3.9/site-packages/scipy/special/__init__.py", line 663, in <module>
    from . import _ufuncs
  File "_ufuncs.pyx", line 1, in init scipy.special._ufuncs
ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/anaconda3/envs/face
<think>我们正在解决用户遇到的一个具体问题:在解压RAR文件时出现错误提示`libstdc++.so.6:version&#39;GLIBCXX_3.4.20&#39;notfound`。根据引用资料,这通常是因为系统中安装的libstdc++库版本过低,缺少所需的GLIBCXX_3.4.20版本。用户的需求是修复这个错误,以便能够正常解压RAR文件。参考引用资料,我们可以总结出以下解决步骤:1.确认错误:错误信息表明系统缺少GLIBCXX_3.4.20版本的符号,这通常是因为libstdc++.so.6的版本过低。2.检查当前libstdc++版本:使用命令`strings/usr/lib64/libstdc++.so.6|grepGLIBCXX`(或类似路径,根据系统不同可能路径有所差异)查看当前支持的GLIBCXX版本,确认是否确实缺少GLIBCXX_3.4.203.如果当前版本不支持,需要更新libstdc++库。根据引用[3]和[4],更新方法有两种主要途径:a.从官方源升级(如果可用):例如在CentOS中,可以尝试更新gcc或libstdc++包。但要注意,官方源可能不提供足够新的版本(如CentOS7默认的gcc版本是4.8.5,最高只支持到GLIBCXX_3.4.19)。b.手动下载较新版本的libstdc++.so并替换或添加(需要谨慎操作,避免系统不稳定)。4.在引用[4]中提到conda环境下可以通过conda来更新,但用户的问题可能不是在conda环境下,所以我们需要考虑系统级别的更新。根据引用[2],用户的环境是CentOS7.6,并且遇到了同样的两个错误(GLIBCXX_3.4.20和CXXABI_1.3.8)。因此,我们可以参考针对CentOS7的解决方案。具体步骤:步骤1:检查当前libstdc++支持的版本```strings/usr/lib64/libstdc++.so.6|grepGLIBCXX```如果输出中没有`GLIBCXX_3.4.20`,则说明需要更新。步骤2:尝试通过yum更新(可能无法解决,因为CentOS7官方源中的libstdc++版本较低)```sudoyumupdatelibstdc++```然后再次检查版本。如果更新后仍然没有,则需要手动安装更高版本的libstdc++。步骤3:手动安装高版本的libstdc++-从其他来源(如较新的发行版或开发者工具包)获取高版本的libstdc++.so文件。例如,可以从官方GCC发布中下载或者从已经安装了高版本gcc的系统中复制。-引用[3]中提到可以查找已有的库文件(如`find/-namelibstdc++.so.6.0.21`),但如果没有则需要下载。-一种常见的方法是安装较新的GCC版本(例如GCC7或更高),因为新版本的GCC会自带新的libstdc++。在CentOS7上可以通过devtoolset来安装。步骤4:使用devtoolset安装高版本GCC(推荐)-安装CentOS的SoftwareCollections(SCL)仓库,然后安装devtoolset-7(或更高版本,如devtoolset-8,devtoolset-9等)。-具体步骤:```sudoyuminstallcentos-release-sclsudoyuminstalldevtoolset-7sclenabledevtoolset-7bash#在当前shell中启用devtoolset-7```-然后检查新版本的libstdc++:`strings/opt/rh/devtoolset-7/root/usr/lib64/libstdc++.so.6|grepGLIBCXX`,应该会看到包含GLIBCXX_3.4.20及更高版本。-但是,这样安装的库在默认情况下只对启用devtoolset的环境有效。为了让系统全局使用,可以将新的库文件复制或链接到系统目录(如/usr/lib64),但这有一定风险,可能影响系统稳定性。另一种方法是在运行需要高版本库的程序时,指定LD_LIBRARY_PATH。步骤5:替换或添加库文件(谨慎操作)-将新版本的库文件(例如从devtoolset-7中得到的`/opt/rh/devtoolset-7/root/usr/lib64/libstdc++.so.6.0.24`)复制到系统库目录(如`/usr/lib64`)。-然后重建符号链接:```cd/usr/lib64sudomvlibstdc++.so.6libstdc++.so.6.bak#备份旧的sudoln-slibstdc++.so.6.0.24libstdc++.so.6```-注意:直接替换系统库可能存在风险,因为系统其他程序可能依赖于旧版本。因此,更推荐使用LD_LIBRARY_PATH的方式。步骤6:使用LD_LIBRARY_PATH(推荐,避免影响系统全局)-在运行解压RAR程序的命令前,设置LD_LIBRARY_PATH指向新库所在的目录。-例如,如果新库在`/opt/rh/devtoolset-7/root/usr/lib64`,则:```exportLD_LIBRARY_PATH=/opt/rh/devtoolset-7/root/usr/lib64:$LD_LIBRARY_PATHrarxfile.rar#然后运行rar命令```-可以将这个export命令写入一个脚本,专门用来运行rar程序。另外,用户的问题是关于解压RAR文件,那么可能使用的是`unrar`或者`rar`命令。如果是因为unrar/rar程序需要高版本的libstdc++,也可以考虑下载静态编译版本的unrar,这样就不依赖系统的动态库。步骤7:使用静态编译的unrar-从RAR实验室下载Linux版本的RAR程序(https://www.rarlab.com/download.htm),选择静态编译版本(通常文件名中包含`static`)。-解压后直接运行其中的`unrar`或`rar`可执行文件,因为是静态链接,所以不依赖系统的libstdc++。总结:推荐的方法依次是:1.尝试使用静态编译版本的unrar(最简单安全)。2.使用devtoolset安装高版本GCC,然后通过设置LD_LIBRARY_PATH来运行rar命令。3.如果上述方法都不可行,再考虑手动替换系统库(需谨慎)。根据引用[3]和[4],我们也可以看到在conda环境下有类似的解决方案,但用户的问题可能不是在conda环境中,所以这里不展开。现在,我们将按照用户要求,提供结构清晰的回答,并生成相关问题。注意:回答中需要引用时,在引用的段落末尾自然地添加引用标识,如[^1]。</think>### 解决 RAR 解压报错:`libstdc++.so.6: version &#39;GLIBCXX_3.4.20&#39; not found` 此错误是由于系统动态库 `libstdc++.so.6` 版本过低,缺少 `GLIBCXX_3.4.20` 符号导致的。以下是逐步解决方案: #### 步骤 1:验证缺失的版本 ```bash # 检查当前支持的 GLIBCXX 版本 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX ``` 若输出中**无 `GLIBCXX_3.4.20`**(如 CentOS 7 默认最高到 3.4.19),则需升级库[^2][^3]。 #### 步骤 2:安装高版本 libstdc++ ##### 方法 1:通过开发者工具集(推荐) ```bash # 启用 Software Collections 仓库 sudo yum install centos-release-scl # 安装 devtoolset-8(包含 GCC 8.3+) sudo yum install devtoolset-8 # 激活环境(临时生效) scl enable devtoolset-8 bash # 验证新版本 strings /opt/rh/devtoolset-8/root/usr/lib64/libstdc++.so.6 | grep GLIBCXX ``` 输出应包含 `GLIBCXX_3.4.20`[^3]。 ##### 方法 2:手动更新库文件 ```bash # 下载高版本库(示例:GCC 8.3) wget http://mirror.centos.org/centos/7/sclo/x86_64/rh/devtoolset-8-libstdc++-devel-8.3.1-3.el7.x86_64.rpm # 解压并复制库文件 sudo rpm2cpio devtoolset-8*.rpm | cpio -idv sudo cp -f usr/lib64/libstdc++.so.6.0.25 /usr/lib64/ # 重建软链接 sudo ln -sf /usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6 ``` #### 步骤 3:验证修复 ```bash # 检查是否包含 GLIBCXX_3.4.20 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.20 ``` 出现 `GLIBCXX_3.4.20` 即表示成功[^3]。 #### 备选方案:使用静态编译版 RAR 若库更新有风险,可下载静态编译版: ```bash wget https://www.rarlab.com/rar/rarlinux-x64-6.22.tar.gz tar -xzf rarlinux-*.tar.gz cd rar/ ./unrar x yourfile.rar # 不依赖系统库 ``` #### 注意事项 1. **权限问题**:操作需 `sudo` 权限 2. **环境隔离**:若在 Conda 环境中,需更新 Conda 的库(`conda update libgcc`)[^4] 3. **兼容性**:手动替换库可能影响其他程序,建议优先使用开发者工具集 > **根本原因**:系统自带的 GCC 版本过低(CentOS 7 默认为 GCC 4.8.5),而 RAR 需要 ≥GCC 5.2 的库支持[^2][^3]。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源启智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值