我在 Kubuntu21.04 安装 Matlab R2018a 后,打开实时编辑器报错。
从Java吐出的报错中可以看到如下的错误信息:
/usr/lib/x86_64-linux-gnu/libcairo.so.2: undefined symbol: FT_Get_Var_Design_Coordinates
在stack overflow搜索后发现,错误原因是 /usr/lib/x86_64-linux-gnu/libcairo.so.2
库依赖 FT_Get_Var_Design_Coordinates
符号,而这个符号存在于 libfreetype.so
中。此时搜索系统中存在的 libcairo.so
:
$ sudo find / -type f -iname 'libcairo.so*'
可以发现Matlab并没有自带 libcairo.so
,它只能调用系统中的,故搜索系统中存在的 libfreetype.so
:
$ sudo find / -type f -iname 'libfreetype.so*'
可以发现 Matlab 自带了 freetype 库,那么分别查看是哪个库缺少了所需的符号:
$ nm -s -D /usr/lib/x86_64-linux-gnu/libfreetype.so.6.17.4 | grep FT_Get_Var_Design_Coordinates
000000000001c1d0 T FT_Get_Var_Design_Coordinates
$ nm -s -D /usr/local/MATLAB/R2018a/bin/glnxa64/libfreetype.so.6.11.1 | grep FT_Get_Var_Design_Coordinates
可以看到系统库具有这个符号而 Matlab 自带库中并不存在这个符号。
查看 Matlab 中自带的库,可以发现是通过 libfreetype.so.6
软链接到 libfreetype.so.6.11.1
的:
$ ls /usr/local/MATLAB/R2018a/bin/glnxa64/libfreetype.so* -l
lrwxrwxrwx 1 root root 42 8月 24 11:10 /usr/local/MATLAB/R2018a/bin/glnxa64/libfreetype.so.6 -> /usr/lib/x86_64-linux-gnu/libfreetype.so.6
-r--r--r-- 1 root root 651950 2月 6 2018 /usr/local/MATLAB/R2018a/bin/glnxa64/libfreetype.so.6.11.1
那么我们只需要将这个软链接重新链接到系统库上即可:
$ sudo rm /usr/local/MATLAB/R2018a/bin/glnxa64/libfreetype.so.6
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/local/MATLAB/R2018a/bin/glnxa64/libfreetype.so.6
测试此时实时编辑器已经可以正常运行。
另外使用下面的命令可以检查断开失效的软链接:
$ find . -xtype l
参考资料
R, issue “unable to load shared object cairo.so” on Linux CentOS 7
SDUST weilinfox