(已解决)Import报错 Version `GLIBCXX_3.4.22‘ not found

本文解决在Ubuntu16.04系统下Anaconda环境中使用Python3.7时,因libstdc++.so.6版本过低导致的导入错误。通过添加PPA源、更新GCC版本及libstdc++6库,最终将GLIBCXX版本更新至3.4.28,成功解决ImportError。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统 ubuntu 16.04

报错:

anaconda环境下python3.7 import一个包时遇到这个报错:
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22’ not found

检查版本:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCX

发现最高只有 GLIBCXX_3.4.21,而不是 3.4.22,需要更新 libstdc++.so.6。
尝试了网上几个方法均无效,还把显卡驱动弄坏了一次,终于找到了对的办法了!!大家没事真的不要随便删除替换 /usr/lib/x86_64-linux-gnu/ 下的文件,好多都是一动系统就会崩!
参考链接:stackoverflow

解决办法:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get upgrade libstdc++6

之后再检查:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCX

发现版本一路更新到了 GLIBCXX_3.4.28,之后Import不报错。

### 解决方案概述 当遇到 `ImportError: GLIBCXX_3.4.29 not found` 的错误时,这通常是因为系统的 GCC 版本过旧,导致缺少所需的 C++ 标准库版本。此问题可能会影响多个依赖项的加载,包括像 `sklearn` 这样的机器学习库。 以下是针对该问题的具体分析和解决方案: --- #### 1. **确认当前系统中的 GCC 和 glibcxx 版本** 可以通过以下命令检查当前安装的 GCC 及其对应的 `libstdc++.so` 文件版本: ```bash strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX ``` 如果输出中不包含 `GLIBCXX_3.4.29` 或更高版本,则说明需要升级 GCC[^1]。 --- #### 2. **更新 GCC 到支持所需标准库的版本** 对于 Linux 系统,可以尝试通过包管理器或源码编译来更新 GCC。例如,在基于 Debian 的发行版上运行以下命令: ```bash sudo apt update && sudo apt install gcc-10 g++-10 ``` 设置默认使用的 GCC 版本: ```bash sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100 ``` 验证新版本是否生效: ```bash gcc --version g++ --version ``` 重新构建 `libstdc++` 后再次执行上述字符串匹配命令以确认已解决问题。 --- #### 3. **创建软链接到兼容的标准库文件** 如果无法全局更新 GCC,可以选择手动下载并配置新的 `libstdc++.so` 文件作为替代方法。具体操作如下: 从官方 GNU 官方网站或其他可信资源获取最新版本的 GCC 并提取其中的共享对象文件: ```bash wget http://ftp.gnu.org/gnu/gcc/gcc-10.3.0/gcc-10.3.0.tar.gz tar -xf gcc-10.3.0.tar.gz cd gcc-10.3.0 find . -name "libstdc++.so*" cp ./path/to/new/libstdc++.so.6 ~/custom_lib/ export LD_LIBRARY_PATH=~/custom_lib:$LD_LIBRARY_PATH ``` 这样会强制程序优先使用指定路径下的动态链接库而非系统自带的老版本。 --- #### 4. **在 Miniconda 中单独处理环境冲突** 由于问题是发生在 Miniconda 下,因此建议为项目创建独立虚拟环境,并确保所有必要的依赖都来自 Conda 渠道而不是 PyPI。例如: ```bash conda create -n sklearn_env python=3.8 conda activate sklearn_env conda install scikit-learn numpy pandas matplotlib ``` 这种方式能够有效规避因不同工具链间差异引发的一系列潜在隐患。 --- #### 5. **其他注意事项** 有时即使解决了本地开发机上的问题,部署至生产服务器仍可能出现类似状况。为此推荐始终打包应用程序及其全部依赖(如通过 Docker 镜像),从而实现完全一致的运行条件控制[^2]。 --- ### 示例代码片段 下面展示如何测试当前环境中是否存在目标符号定义以及切换默认GCC版本的过程: ```python import ctypes try: ctypes.CDLL('libstdc++.so.6').GLIBCXX_3_4_29 except AttributeError as e: print(f"Missing symbol: {e}") else: print("Symbol exists.") ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值