Python导入Matlab Engine报错:缺失GLIBCXX_3.4.22版本
解决MATLAB Engine for Python导入时的GLIBCXX_3.4.22缺失问题
这个错误的核心原因很明确:你的Ubuntu 16.04系统默认的libstdc++.so.6库版本太低,不包含MATLAB R2018a依赖的GLIBCXX_3.4.22版本。重新安装MATLAB Engine没用是因为问题不在Engine安装本身,而是系统底层库的版本不匹配。
下面是具体的解决步骤:
1. 确认系统当前支持的GLIBCXX版本
先运行这条命令,检查你的系统现有libstdc++支持的版本:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
你会发现输出里确实没有GLIBCXX_3.4.22,这就是问题所在。
2. 安装更高版本的GCC(提供所需的libstdc++)
Ubuntu 16.04默认源里的GCC版本不足以提供GLIBCXX_3.4.22,我们需要安装GCC 7:
- 首先添加官方的toolchain PPA:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
- 更新软件源:
sudo apt update
- 安装GCC 7和对应的G++:
sudo apt install gcc-7 g++-7
3. 让MATLAB Engine加载正确的libstdc++库
有两种方式可以实现,选其中一种即可:
方法一:临时设置环境变量(适合临时测试)
每次运行Python脚本前,先执行这条命令,把GCC 7的libstdc++路径加入到环境变量中:
export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7:$LD_LIBRARY_PATH
之后再运行你的Python脚本,import matlab.engine应该就能正常工作了。
方法二:修改MATLAB的库链接(永久生效)
这种方法更稳定,不需要每次手动设置环境变量:
- 先备份MATLAB自带的旧版
libstdc++.so.6:
sudo mv /usr/local/MATLAB/R2018a/bin/glnxa64/libstdc++.so.6 /usr/local/MATLAB/R2018a/bin/glnxa64/libstdc++.so.6.bak
- 然后创建软链接,指向GCC 7提供的新版
libstdc++.so.6:
sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/7/libstdc++.so.6 /usr/local/MATLAB/R2018a/bin/glnxa64/libstdc++.so.6
4. 验证修复
完成上述步骤后,重新在Python中执行import matlab.engine,应该就不会再出现OSError了。
内容的提问来源于stack exchange,提问作者Dennis




