解决Matlab在Linux下无法使用hardware OpenGL的问题

发布时间 2023-05-02 13:36:10作者: yann-qu

解决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


Ref 1.
Ref 2.
Ref 3.