Во-первых, моя системная информация:
- 4.13.0-26-generic # 29 ~ 16.04.2-Ubuntu SMP Вт 9 января 22:00:44 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
- Чистая установка Matlab R2016b (64-битная)
- Видеокарта: AMD/ATI Pitcairn PRO (Radeon HD 7850)
Проблемы с установкой Vanilla
Итак, я запускаю Matlab из командной строки без аргументов. Я установил две переменные окружения, LIBGL_DEBUG=verbose
и MESA_DEBUG=1
, чтобы получить подробные распечатки любых ошибок. Программное обеспечение запускается без ошибок. Далее я выдаю простую команду заговора:
plot(1,1, 'b*'); grid on;
Matlab успешно создает сюжет, но выдает ряд ошибок, сообщая, что произошла ошибка графического интерфейса низкого уровня. Из командной строки я вижу следующие сообщения:
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))
Их намного больше, но конечный результат тот же: компоновщик не может загрузить графические драйверы с помощью libstdc++., Поэтому файл Matlab уже загружен. Чтобы исправить эту проблему, я переименую соответствующие библиотеки, которые поставляются с Matlab, чтобы заставить его использовать системные библиотеки (которые включают версию 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
Проблемы с Модифицированной Установкой
Переименовав библиотеки C++, чтобы заставить Matlab связываться с системными библиотеками, я перезагружаю Matlab. Переменные окружения все еще установлены, поэтому о любых ошибках libgl или mesa следует сообщать терминалу. Сразу после запуска программы я получаю следующую ошибку в 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)
Кроме того, в выводе терминала отображаются следующие сообщения:
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
Эти сообщения не указывают на какие-либо проблемы; похоже, объект radeonsi_dri загружен успешно. Когда я пытаюсь выполнить ту же команду заговора, что и выше, я получаю следующее сообщение в Matlab:
Caught unexpected fl::except::IInternalException
На рисунке показано пустое изображение; сюжет не был создан.
Другие заметки
- Я также попытался переименовать библиотеку
libgcc_s.so.1
в каталоге Matlab, чтобы она использовала системную версию, но это ничего не меняет. - В моем файле Xorg.0.log нет ошибок (EE)
- Я успешно протестировал OpenGL и видеокарту с
glmark2
, то есть OpenGL очень хорошо работает с аппаратным ускорением на моей машине, но у Matlab есть некоторые проблемы. - Matlab R2016b поставляется с
libGL.so.1.6.0
(вR2016b/sys/opengl/lib/glnxa64
), но моя версия ОС -libGL.so.1.2.0
). Может ли это вызвать проблемы? Я попытался переименовать файлы libGL, поставляемые с Matlab, чтобы заставить его использовать системные версии, но сообщения об ошибках все те же. - С измененными файлами libstdc++ я могу запустить Matlab в программном режиме openGL с помощью команды
matlab -softwareopengl
. Печать работает нормально, хотя Mesa выдает предупреждение / ошибку,User error: GL_INVALID_ENUM in glGetIntegerv(pname=GL_MAJOR_VERSION)