问题原因

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐