我如何解决 Matlab/Simulink S-Function 错误:mexa64: GLIBCXX_3.4.xx not found
问题
当尝试运行使用 mex 编译的 S-Function 的 Simulink 模型时,我遇到了以下错误:
mysfunction.mexa64
Invalid MEX-file '/home/user/mysfunction.mexa64': /opt/matlab/R2025a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /home/user/mysfunction.mexa64)解决方案
此错误发生的原因是 Matlab 使用的 libstdc++.so.6 版本(本例中为 /opt/matlab/R2025a/sys/os/glnxa64/libstdc++.so.6)比编译后的 S-Function 所需的版本(在用 mex 编译时使用)更旧。
在我的情况下,Matlab 自带 GLIBCXX_3.4.30,但我的系统 libstdc++ 是 GLIBCXX_3.4.32。这是一个非常小的版本不匹配,系统库稍微新一点(Ubuntu 24.04 LTS,2025-08-06)。
我通过删除 Matlab 目录中的 libstdc++.so.6 文件解决了这个问题,因为它使用系统的 libstdc++.so.6 文件也能正常工作。
在尝试此解决方案之前,请确保你已备份原始文件。
remove_matlab_libstdc.sh
rm /opt/matlab/R2025a/sys/os/glnxa64/libstdc++.so.*之后,你需要重启 Matlab 并使用 mex 重新编译你的 S-Function。此后错误应该已经解决。
Check out similar posts by category:
Matlab/Simulink
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow