Аппаратный сбой Matlab OpenGL в Ubuntu 16.04.3 - не удается инициализировать общие ресурсы
1650
AndrewCox
Во-первых, моя системная информация:
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)
1 ответ на вопрос
0
AndrewCox
Это решение происходит из моего идентичного поста на форуме Matlab. Как выяснили другие на форуме Matlab, это, похоже, ошибка в joglобнаружении драйверов Mesa по совпадению строк для «Gallium» в строке glRenderer. Люди из Mesa, по-видимому, недавно внесли изменения в то, как сообщается о драйвере / версии с открытым исходным кодом.
Шаг 1 (ниже) необходимо выполнить только один раз, а шаги 2, 3, 4 - для каждой версии Matlab, установленной на вашем компьютере.
Установите новейшую библиотеку libjogl2:
#Добавить Xenial-Proposed репозиторий (необходимо с февраля 2018 г.) sudo sh -c "echo" deb http://archive.ubuntu.com/ubuntu/ \ предложенная xenial ограниченная главная мультивселенная вселенная > /etc/apt/sources.list.d/xenial-proposed.list " sudo apt update -y # УСТАНАВЛИВАЙТЕ ТОЛЬКО СЛЕДУЮЩУЮ из предложенного xenial! # (вы не хотите обновлять ВСЕ ваши пакеты до совершенства) sudo apt install -y libjogl2-java / xenial-предлагаемый #includes libjogl2-jni # REMOVE XENIAL-PROPOSED, чтобы избежать нежелательных обновлений других пакетов sudo rm /etc/apt/sources.list.d/xenial-proposed.list sudo apt update -y
Переименуйте файлы стандартной библиотеки C ++ (повторяется из вопроса выше). Это гарантирует, что драйверы графики загружаются с той же стандартной библиотекой, которая им нужна, а не с теми, которые поставляются в комплекте с Matlab.
Измените classpath.txtи librarypath.txtфайлы в $matlabroot/toolbox/local. Используя мои оригинальные пути, этот путь расширяется до/opt/local/MATLAB/R2017b/toolbox/local
В classpath.txt, найти и закомментировать следующие две строки:
В librarypath.txt, добавьте новую строку в конце файла с
/ USR / Библиотека / JNI
Согласно оригинальному сценарию, представленному выше, Matlab теперь должен работать без ошибок. Однако, чтобы убедиться, что включенные по умолчанию библиотеки не мешают, переименуйте следующие библиотеки в $matlabroot/bin/glnxa64: