Linux环境MATLAB 2019a运行codegen提示GLIBCXX_3.4_20缺失怎么解决
... /lib64/libstdc++.so.6: version: 'GLIBCXX_3.4_20' not found ...
该报错是因为运行codegen时依赖的libstdc版本高于当前加载的libstdc.so.6对应的版本,MATLAB 2019a默认会优先加载自带的旧版本libstdc++库,即便系统已经安装高版本库也可能触发该问题。
先执行以下命令确认系统已安装的libstdc++.so.6是否包含目标版本:strings /lib64/libstdc++.so.6 | grep GLIBCXX_3.4.20
- 如果有输出结果,说明系统库版本满足要求,直接参考【系统版本满足要求的解决方法】操作
- 如果无输出结果,说明系统库版本过低,先参考【系统版本过低的升级方法】操作,再执行后续配置
按需选择对应方案即可:
方法1:临时生效(仅对当前终端启动的MATLAB生效)
启动MATLAB前在当前终端执行:export LD_PRELOAD=/lib64/libstdc++.so.6
之后在同个终端启动MATLAB即可。
方法2:当前用户永久生效
编辑用户bash配置文件:vim ~/.bashrc
在文件末尾添加以下内容:export LD_PRELOAD=/lib64/libstdc++.so.6
保存退出后执行生效命令:source ~/.bashrc
之后所有终端启动的MATLAB都会优先加载系统高版本libstdc++库。
方法3:修改MATLAB默认库软链接(全局生效,所有用户有效)
先备份MATLAB自带的旧库软链接:sudo mv /usr/local/MATLAB/R2019a/sys/os/glnxa64/libstdc++.so.6 /usr/local/MATLAB/R2019a/sys/os/glnxa64/libstdc++.so.6.bak
创建指向系统高版本库的软链接:sudo ln -s /lib64/libstdc++.so.6 /usr/local/MATLAB/R2019a/sys/os/glnxa64/libstdc++.so.6
修改完成后重启MATLAB即可生效。
根据你使用的发行版选择对应命令:
- CentOS/RHEL系列:
sudo yum install -y devtoolset-8-gcc-c++ source /opt/rh/devtoolset-8/enable
升级完成后可以用以下路径的库替代前文的/lib64/libstdc++.so.6:/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.so.6
- Ubuntu/Debian系列:
sudo apt update && sudo apt install -y libstdc++6
升级完成后再执行前置检查命令确认版本存在,再按前述方法配置即可。
内容的提问来源于stack exchange,提问作者Mastiff

