当前位置:   article > 正文

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

importerror: /lib/x86_64-linux-gnu/libstdc++.so.6: version `glibcxx_3.4.29

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/
  • 1
  • 2

查看一下库的依赖

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

输出

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)
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

查看一下绝对路径

pwd
  • 1

输出

/home/pgp/anaconda3/envs/eai/lib
  • 1

重点:利用export 添加路径

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

持久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
  • 1
  • 2

参考: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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/189284?site
推荐阅读
相关标签
  

闽ICP备14008679号