Python 安装 `GLIBCXX` 版本不匹配 报错

REF:

报错实例

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/xxx/anaconda3/envs/habitat/lib/python3.9/site-packages/kiwisolver/_cext.cpython-39-x86_64-linux-gnu.so)

  • [Step 0]: libstdc++GLIBCXX_3.x.x 的关系

    • libstdc++ 是 GNU C++ 标准库的一个实现,允许程序使用 C++ 标准库中定义的各种功能。
    • GLIBCXX_3.x.xlibstdc++ 版本号的一部分,用于标示库中某个特定的版本或功能集。
    • 在 Linux 系统上编译 C++ 程序时,编译器(如 g++)会将程序与 libstdc++ 链接。此过程中,程序会依赖特定版本的 GLIBCXX 来确保所有使用的库特性都是兼容的。
    • 一个 libstdc++ 库会支持多个 GLIBCXX_3.x.x 版本 , 每个标记代表库中某个特定版本的功能。
    • 所以上面报错的原因就是 /lib/x86_64-linux-gnu/libstdc++.so.6 中不包含 GLIBCXX_3.4.29 版本。所以我们要做的就是更新 对应的C++版本。

  • [Step 1]: 查看当前系统版本支持的 GLIBCXX.
    strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX   # /usr/lib/libstdc++.so.6
    
    输出就是当前 libstdc++ 包含的版本,可以看到并不包含 GLIBCXX_3.4.29
    GLIBCXX_3.4
    GLIBCXX_3.4.1
    GLIBCXX_3.4.2
    GLIBCXX_3.4.3
    GLIBCXX_3.4.4
    GLIBCXX_3.4.5
    GLIBCXX_3.4.6
    GLIBCXX_3.4.7
    GLIBCXX_3.4.8
    GLIBCXX_3.4.9
    GLIBCXX_3.4.10
    GLIBCXX_3.4.11
    GLIBCXX_3.4.12
    GLIBCXX_3.4.13
    GLIBCXX_3.4.14
    GLIBCXX_3.4.15
    GLIBCXX_3.4.16
    GLIBCXX_3.4.17
    GLIBCXX_3.4.18
    GLIBCXX_3.4.19
    GLIBCXX_3.4.20
    GLIBCXX_3.4.21
    GLIBCXX_3.4.22
    GLIBCXX_3.4.23
    GLIBCXX_3.4.24
    GLIBCXX_3.4.25
    GLIBCXX_3.4.26
    GLIBCXX_3.4.27
    GLIBCXX_3.4.28
    GLIBCXX_DEBUG_MESSAGE_LENGTH
    

  • [Step 2]: 查找对应支持 GLIBCXX 版本的 libstdc++ 版本,并复制到对应的文件中。
    • 查找对应版本

    • 因此,我们需要找到 libstdc++.so.6.0.29 放到 /lib/x86_64-linux-gnu/ 下,并修改 libstdc++.so.6 的连接。

      • [option 1] 查找当前系统中有没有 libstdc++.so.6.0.29 文件。

        一般conda 和 pip 在安装库的时候,都会下载各种版本的 libstdc++ ,如果有,就不用再下载了,直接 cp 过来就行。

      ## -- 查找 `libstdc++.so.6.0.29`    -- ##
      find / -name libstdc++.so.6.0.29            # 可以 root 搜		
      
      ## --  将对应的文件 cp 到 /lib/x86_64-linux-gnu/,并更改连接  -- ##
      cp /home/wubing/anaconda3/lib/libstdc++.so.6.0.29   /lib/x86_64-linux-gnu/   # root
      rm -f libstdc++.so.6                                     #  删除旧的链接文件
      ln -s libstdc++.so.6.0.29 libstdc++.so.6                 # 创建新的链接
      
      $ ll -h | grep libstd
      lrwxrwxrwx   1 root root    19 59 14:58 libstdc++.so.6 -> libstdc++.so.6.0.29*
      -rw-r--r--   1 root root  1.9M 79  2023 libstdc++.so.6.0.28
      -rwxr-xr-x   1 root root   18M 59 14:55 libstdc++.so.6.0.29*
      

  • [Step 4]: 重复第二步,检测当前支持的 GLIBCXX 版本
  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值