解决Matlab在Linux下无法使用hardware OpenGL的问题
1 报错信息
在命令行使用命令matlab -nodesktop -nosplash
启动Matlab时,出现如下报错:
MATLAB is selecting SOFTWARE OPENGL rendering.
在查阅ArchWiki Matlab OpenGL Acceleration栏目后,发现这是因为Matlab未启用OpenGL硬件加速,只启用了OpenGL软件加速造成的。
2 问题原因
问题原因:Matlab使用了自己的libstdc++.so
库,版本为6.0.25。
$ ll -a ~/MatlabR2021a/sys/os/glnxa64/libstdc++*
# 输出:
# -r-xr-xr-x 1 yann yann 45 Nov 15 2020 /home/yann/MatlabR2021a/sys/os/glnxa64/libstdc++.so.6 -> /home/yann/MatlabR2021a/sys/os/glnxa64/libstdc++.so.6.0.25
而系统中libstdc++.so
库版本与安装包自带的版本不同,版本为6.0.28:
$ ll -a /usr/lib/x86_64-linux-gnu/libstdc++*
# 输出:
# lrwxrwxrwx 1 root root 19 Apr 17 10:00 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.28
# -rw-r--r-- 1 root root 1.8M Jan 10 2021 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
3 解决方案
将Matlab中的libstdc++.so
链接到系统中的该库即可。
$ sudo ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28 /home/yann/MatlabR2021a/sys/os/glnxa64/libstdc++.so.6
重启Matlab,发现该报错会自动消失。
如果重启后还是出现,可以在Matlab中使用opengl('save','hardware')
默认开启OpenGL硬件加速。
4 新的问题
修改后打开Matlab Gui可能会出现如下报错:
com.jogamp.opengl.GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection :0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x76ddc7cd, isOwner false, <6876ff80, 5d5c50dc>[count 0, qsz 0, owner <NULL>]]]
at jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:326)
at jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:297)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:688)
at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:580)
at jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:297)
... 2 more
解决方案见ArchWiki Matlab OpenGL Acceleration。