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

  • Post author:
  • Post category:linux




问题原因


libstdc++.so.6

版本过低,因为

GLIBCXX

至少要求3.4.29版本



解决方法

  1. 首先定位到报错

    libstdc++.so.6

    所在位置:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6

查看该动态库对应的版本信息:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4
... ... ...
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20

不难看出,当前

libstdc++.so.6

版本最高到

GLIBCXX_3.4.20

,但是我们需要的苦版本是

GLIBCXX_3.4.29

  1. 首先看看本机上有没有其他的高版本的

    libstdc++.so.6
find / -name libstdc++.so.6
/root/miniconda3/envs/py_37/lib/libstdc++.so.6
/root/miniconda3/envs/py_37/nsight-compute/2022.3.0/host/linux-desktop-glibc_2_11_3-x64/libstdc++.so.6
/root/miniconda3/lib/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6

查看第一个的信息

strings /root/miniconda3/envs/py_37/lib/libstdc++.so.6 | grep GLIBCXX_3.4
... ... ...
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29

发现这个动态链接库满足我们的要求(我这里第一个就成功了,当然也有可能是其他几个

libstdc++.so.6

满足要求)

  1. 更新原先的动态链接库
# 删除原动态链接库
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6

# 更新动态链接库
sudo cp /root/miniconda3/envs/py_37/lib/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/

# 创建软连接
sudo ln -s /root/miniconda3/envs/py_37/lib/libstdc++.so.6.0.29 /usr/lib/x86_64-linux-gnu/libstdc++.so.6

# 再次查看动态链接库信息
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4
... ... ...
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29

成功,此时再次执行代码错误消失

参考链接:

https://github.com/pybind/pybind11/discussions/3453



版权声明:本文为weixin_42099090原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。