ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

Posted kindel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found相关的知识,希望对你有一定的参考价值。

Bug描述

今天主要解决一个 Bug:libstdc++.so.6: version GLIBCXX_3.4.29' not found

主要是和 libstc++版本问题相关,找了很多方法,其他很多方法都是直接修改libstc++.so的版本,但是直接修改这种可能被多个共享库依赖的库版本将会牵一发动全身引出很多问题,本着越复杂风险越大的原则,现提出最简单的解决方法。

Bug 总体描述如下:

ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29’ not found (required by /home/hello/anaconda3/envs/eai/lib/python3.8/site-packages/scipy/spatial/_ckdtree.cpython-38-x86_64-linux-gnu.so)

可以看到libstc++.so是被 /home/hello/anaconda3/envs/eai/lib/python3.8/site-packages/scipy/spatial/_ckdtree.cpython-38-x86_64-linux-gnu.so所引用的,因此可以调到对应的文件夹查看

处理

# 这里你需要调整为自己文件库的路径
cd /home/hello/anaconda3/envs/eai/lib/python3.8/site-packages/scipy/spatial/

查看一下库的依赖

ldd _ckdtree.cpython-38-x86_64-linux-gnu.so

输出

linux-vdso.so.1 (0x00007ffc7dbd4000)
libstdc++.so.6 => /home/pgp/anaconda3/envs/eai/lib/python3.8/site-packages/scipy/spatial/./../../../../libstdc++.so.6 (0x00007fc143141000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc142da3000)
libgcc_s.so.1 => /home/pgp/anaconda3/envs/eai/lib/python3.8/site-packages/scipy/spatial/./../../../../libgcc_s.so.1 (0x00007fc14340d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc142b84000)

然后直接去到=>指向的库的路径

/home/pgp/anaconda3/envs/eai/lib/python3.8/site-packages/scipy/spatial/./../../../../

查看一下绝对路径

pwd

输出

/home/pgp/anaconda3/envs/eai/lib

重点:利用export 添加路径

export LD_LIBRARY_PATH=/home/hello/anaconda3/envs/eai/lib:$LD_LIBRARY_PATH

持久export方法解决

注意:但是这是暂时有效的,即重开一个终端可能无效

方法1:将 lib 目录加到 /etc/ld.so.conf 中然后ldconfig

方法2:将export LD_LIBRARY_PATH=/home/hello/anaconda3/envs/eai/lib:$LD_LIBRARY_PATH

echo export LD_LIBRARY_PATH=/home/hello/anaconda3/envs/eai/lib:$LD_LIBRARY_PATH >> ~/.bashrc
source ~/.bashrc

参考:https://blog.csdn.net/u011029104/article/details/122966361

最后

我期间测试了很多的方法

  1. 修改libstdc++.so的版本:会导致对libc.so的版本又会有新的要求
  2. 用patchelf修改库的路径依赖,但是在我自己的电脑有效,但是在远程无效

总结&参考

越复杂风险越大,但是同样将上上面方法所需的参考资料也附上,万一对你们有用呢?

patchelf命令
https://blog.csdn.net/juluwangriyue/article/details/108617283

更新libstdc++.so版本
https://blog.csdn.net/bohrium/article/details/126546521
https://blog.csdn.net/jaber_chen/article/details/124715913
https://blog.csdn.net/qq_41905051/article/details/122707137

以上是关于ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found的主要内容,如果未能解决你的问题,请参考以下文章

ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

ubuntu里的/usr/lib/x86_64-linux-gnu这个文件夹是做啥的

/usr/bin/ld: 搜索 -lQtCore 时跳过不兼容的 /usr/lib/x86_64-linux-gnu/libQtCore.so

//usr/lib/x86_64-linux-gnu/libcrypto.so.1.1:添加符号时出错:命令行中缺少 DSO

No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so

DGL_GPU版本安装过程出现的问题