问题原因

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

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐