文章目录
- [在 Ubuntu 24.04 上安装 MATLAB R2021b](#在 Ubuntu 24.04 上安装 MATLAB R2021b)
在 Ubuntu 24.04 上安装 MATLAB R2021b
MATLAB R2021b 是 2021 年发布的版本,而 Ubuntu 24.04 是 2024 年的系统。
两者差了三年,安装过程中会遇到一些兼容性问题。
本文记录完整的安装过程和踩坑经验,供遇到同样问题的朋友参考。
安装前的准备
准备好以下文件:
Matlab911R2021b_Lin64.iso(安装镜像)license.lic(许可证文件)libmwlmgrimpl.so(用于替换的库文件)
把 ISO 镜像挂载到系统:
bash
sudo mount -o loop Matlab911R2021b_Lin64.iso /media/你的用户名/MATHWORKS_R2021B
或者直接在文件管理器里双击 ISO 文件,系统会自动挂载。
第一个坑:安装程序启动不了
进入挂载目录,运行安装程序:
bash
cd /media/你的用户名/MATHWORKS_R2021B
sudo ./install
在 Ubuntu 24.04 上,你大概率会看到这个错误:
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to launch web window with error: Unable to launch the MATLABWindow application.
The exit code was: 127
已中止 (核心已转储)
原因
MATLAB R2021b 自带了一个旧版本的 libfreetype.so.6(版本 2.10.16)。
这个库放在安装目录的 bin/glnxa64/ 下,启动时会被优先加载。
Ubuntu 24.04 的 libharfbuzz 是新版本,它调用了 freetype 的一个较新函数:
FT_Get_Color_Glyph_Layer。
MATLAB 自带的旧版 freetype 没有这个函数,所以 MATLABWindow 启动失败,返回退出码 127(找不到符号)。
用 ldd 检查就能看出来:
bash
ldd /media/你的用户名/MATHWORKS_R2021B/bin/glnxa64/MATLABWindow
输出里 libfreetype.so.6 指向的是 MATLAB 自带的版本,而不是系统的。
解决办法
ISO 镜像是只读的,没法直接修改。先把内容复制到硬盘上:
bash
mkdir -p ~/matlab-installer
cp -r /media/你的用户名/MATHWORKS_R2021B/* ~/matlab-installer/
chmod u+w ~/matlab-installer/bin/glnxa64/
然后把 MATLAB 自带的 freetype 替换成系统版本:
bash
cd ~/matlab-installer/bin/glnxa64
mv libfreetype.so.6 libfreetype.so.6.bak
mv libfreetype.so.6.16.0 libfreetype.so.6.16.0.bak
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 libfreetype.so.6
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6.20.1 libfreetype.so.6.16.0
这样做之后,MATLAB 的动态链接器加载 libfreetype.so.6 时,会跳转到系统的 libfreetype.so.6.20.1,这个版本包含了 FT_Get_Color_Glyph_Layer,和系统的 harfbuzz 兼容。
现在再运行安装程序:
bash
sudo ~/matlab-installer/install
安装界面应该能正常弹出了。
按照安装向导操作
安装过程和大多数软件差不多,几个关键步骤:
选择安装模式 :如果安装程序能联网,会先出现 MathWorks 登录界面。
点击右上角 "Advanced Options",选择 "I have a File Installation Key"。
如果检测不到网络,会自动进入离线模式,不用手动选。
输入 File Installation Key :
用 README.txt 里提供的那串数字。
选择 License 文件 :指向 license.lic 的位置。
选择安装路径 :建议装在你有读写权限的目录下,例如:
/home/你的用户名/MATLAB/R2021b。
下文用 <matlabfolder> 表示这个路径。
选择组件 :全装大约 30GB,只装 MATLAB 大约 3GB。
不需要的组件可以不勾选,能省磁盘也能加快启动。
第二个坑:MATLAB 本身也启动不了
安装完成后,先别急着高兴。还需要做一步:把安装目录里的 libmwlmgrimpl.so 替换掉(README 里有说明)。
然后试着启动 MATLAB:
bash
<matlabfolder>/bin/matlab
你会看到和安装时一样的错误:
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to launch web window with error: Unable to launch the MATLABWindow application.
The exit code was: 127
原因和安装时一模一样:安装目录下也有自带的旧版 freetype。
再做一次同样的替换:
bash
sudo bash -c '
cd <matlabfolder>/bin/glnxa64
mv libfreetype.so.6 libfreetype.so.6.bak
mv libfreetype.so.6.16.0 libfreetype.so.6.16.0.bak
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 libfreetype.so.6
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6.20.1 libfreetype.so.6.16.0
'
替换完成后,MATLAB 就能正常启动了。
第三个坑:帮助文档报 Java 异常
MATLAB 启动后,命令窗口可能反复弹出这样的错误:
Exception in thread "AWT-EventQueue-0":
java.lang.AbstractMethodError: ice.pilots.html4.DocPaneXml.setCursorChangeable(Z)V
这是 MATLAB 自带的 ICE Browser(用来显示帮助文档的组件)和 Java 运行时之间的版本冲突。
这个问题不影响 MATLAB 的计算、画图等核心功能。只是帮助文档的显示会出问题。
如果想修复,把 ICE Browser 的 JAR 包重命名,MATLAB 会自动回退到其他方式显示帮助:
bash
sudo bash -c '
cd <matlabfolder>/java/jar
for f in ice_browser*.jar; do
[ -f "$f" ] && mv "$f" "${f}.bak"
done
'
也可以不折腾,直接在浏览器里看在线文档:
https://www.mathworks.com/help/matlab/
总结
在 Ubuntu 24.04 上安装 MATLAB R2021b,一共要解决三个问题:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| 安装程序启动失败 | 自带 freetype 太旧,和系统 harfbuzz 不兼容 | 替换安装目录下的 freetype 为系统版本 |
| MATLAB 启动失败 | 同上 | 替换安装目录下的 freetype 为系统版本 |
| 帮助文档报 Java 异常 | ICE Browser 和 Java 版本冲突 | 重命名 ice_browser*.jar 文件 |
核心问题就一个:freetype 版本太旧。
替换掉之后,MATLAB R2021b 在 Ubuntu 24.04 上可以正常使用。
如果你用的是 Ubuntu 22.04,也可能遇到同样的问题,解决办法一样。