Primeiro, minhas informações do sistema:
- 4.13.0-26-genérico # 29 ~ 16.04.2-Ubuntu SMP Ter Jan 9 22:00:44 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
- Instalação limpa do Matlab R2016b (64 bits)
- Placa de vídeo: AMD / ATI Pitcairn PRO (Radeon HD 7850)
Problemas com a instalação do Vanilla
Então, eu inicio o Matlab a partir da linha de comando sem argumentos. Eu configurei duas variáveis de ambiente, LIBGL_DEBUG=verbose
e MESA_DEBUG=1
, para obter impressões detalhadas de quaisquer bugs. O software é iniciado sem erros. Em seguida, eu emito um comando de plotagem simples:
plot(1,1, 'b*'); grid on;
O Matlab cria o enredo com sucesso, mas emite uma série de erros, dizendo que houve um erro gráfico de baixo nível. Na linha de comando, vejo as seguintes mensagens:
libGL: pci id for fd 570: 1002:6819, driver radeonsi
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/tls/radeonsi_dri.so
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so
libGL: dlopen /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so failed (/opt/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found (required by /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so))
Existem muitos mais, mas o resultado final é o mesmo: o linker não pode carregar os drivers gráficos com o libstdc ++. então o arquivo Matlab foi carregado. Para corrigir esse problema, renomeio as bibliotecas relevantes que vêm com o Matlab para forçá-lo a usar as bibliotecas do sistema (que incluem a versão GLIBCXX_3.4.21
):
cd /opt/local/MATLAB/R2016b/sys/os/glnxa64
mv libstdc++.so.6 libstdc++.so.6.bak
mv libstdc++.so.6.0.20 libstdc++.so.6.0.20.bak
Problemas com a instalação modificada
Com as bibliotecas C ++ renomeadas para forçar o Matlab a se vincular às bibliotecas do sistema, eu reinicio o Matlab. As variáveis de ambiente ainda estão definidas, portanto, qualquer erro de libgl ou mesa deve ser reportado ao terminal. Imediatamente após o início do programa, recebo o seguinte erro no Matlab:
com.jogamp.opengl.GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection :1, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x7c1bc33e, isOwner false, <2af5b1a, 46860956>[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(Unknown Source)
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
Exception in thread "Startup Class Loader" java.lang.InternalError: XXX0 profile[1]: GL3bc -> profileImpl GL4bc !!! not mapped
at com.jogamp.opengl.GLProfile.computeProfileMap(GLProfile.java:2047)
at com.jogamp.opengl.GLProfile.initProfilesForDeviceCritical(GLProfile.java:1917)
at com.jogamp.opengl.GLProfile.initProfilesForDevice(GLProfile.java:1866)
at com.jogamp.opengl.GLProfile.initProfilesForDefaultDevices(GLProfile.java:1835)
at com.jogamp.opengl.GLProfile.access$000(GLProfile.java:79)
at com.jogamp.opengl.GLProfile$1.run(GLProfile.java:229)
at java.security.AccessController.doPrivileged(Native Method)
at com.jogamp.opengl.GLProfile.initSingleton(GLProfile.java:215)
at com.mathworks.hg.peer.JavaSceneServerPeer.initializeJOGL(JavaSceneServerPeer.java:147)
at com.mathworks.hg.peer.JavaSceneServerPeer.<clinit>(JavaSceneServerPeer.java:117)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.mathworks.mde.desk.StartupClassLoader.loadClass(StartupClassLoader.java:262)
at com.mathworks.mde.desk.StartupClassLoader.access$900(StartupClassLoader.java:25)
at com.mathworks.mde.desk.StartupClassLoader$2.run(StartupClassLoader.java:248)
at java.lang.Thread.run(Unknown Source)
Além disso, as seguintes mensagens são exibidas na saída do Terminal:
libGL: pci id for fd 570: 1002:6819, driver radeonsi
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/tls/radeonsi_dri.so
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so
libGL: Using DRI3 for screen 0
Estas mensagens não indicam problemas; parece que o objeto radeonsi_dri foi carregado com sucesso. Quando tento o mesmo comando de plotagem acima, recebo a seguinte mensagem no Matlab:
Caught unexpected fl::except::IInternalException
A figura mostra uma imagem vazia; o enredo não foi criado.
Outras notas
- Eu também tentei renomear a biblioteca
libgcc_s.so.1
no diretório do Matlab para que ele use a versão do sistema, mas isso não muda nada.
- Não há erros (EE) no meu arquivo Xorg.0.log
- Eu testei com sucesso o OpenGL e a placa de vídeo com
glmark2
, ou seja, o OpenGL funciona muito bem com a aceleração de hardware na minha máquina, mas o Matlab tem alguns problemas.
- O Matlab R2016b é fornecido com
libGL.so.1.6.0
(em R2016b/sys/opengl/lib/glnxa64
), mas minha versão do SO é libGL.so.1.2.0
). Isso poderia causar um problema? Eu tentei renomear os arquivos libGL enviados com o Matlab para forçá-lo a usar as versões do sistema, mas as mensagens de erro ainda são as mesmas.
- Com os arquivos libstdc ++ modificados, posso executar o Matlab no modo de software openGL por meio do comando
matlab -softwareopengl
. A plotagem funciona bem, embora Mesa exiba o aviso / erro, User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAJOR_VERSION)