Matlab на linux не может ничего сделать (не может загрузить libstdС++. so.6: version `CXXABI_1.3.8 'не найден)

Я запускаю matlab R2016a на Fedora 24, и я не могу использовать команду plot.

Это ошибка, которую я получаю:

Error using gca

While setting the 'Parent' property of 'Axes':

Can't load '/usr/local/MATLAB/R2016a/bin/glnxa64/libmwosgserver.so': /usr/local/MATLAB/R2016a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version 'CXXABI_1.3.8' not found (required by /lib64/libGLU.so.1)

Error in newplot (line 73)

ax = gca(fig);

Также я видел Как исправить: [имя программы]/usr/lib/x86_64-linux-gnu/libstdc++.so.6: версия CXXABI_1.3.8 'не найдена (требуется [имя программы]) и это не помогает.

Ответ 1

Что я сделал, я отредактировал файл с именем .matlab7rc.sh(расположенный в папке "path_to_ matlab/bin" и его скрытый) и раскомментировал все строки, которые были (их несколько):

LDPATH_PREFIX='$MATLAB/sys/opengl/lib/$ARCH'

В файле указывается следующее: uncommenting this line (s)

Чтобы всегда использовать библиотеки OpenGL, поставляемые с MATLAB, раскомментировать следующий линия.

Хотя это, конечно, было трюк, мне любопытно, использует ли OpenGL, поставляемый с MATLAB, ухудшение производительности, и вообще, как этот подход сравнивается с @joe_st_amand answer.

Ответ 2

У меня была та же проблема с этой версией matlab и fedora. Кажется, что matlab добавляет свои собственные пути библиотеки при запуске к LD_LIBRARY_PATH.

Вы можете запустить matlab и сказать ему использовать правильную версию libstdС++, используя следующее: LD_PRELOAD =/usr/lib64/libstdС++. So.6 matlab -desktop

Что я сделал, так это добавить псевдоним в мой .bashrc файл: alias matlab = 'LD_PRELOAD =/usr/lib64/libstdС++. so.6 matlab -desktop'

Надеюсь, что это поможет!

Ответ 3

Альтернативное исправление:

Переименуйте библиотечный файл libstdС++. so.6, чтобы MATLAB не смог его найти и вынужден использовать системную версию библиотеки. Этот файл находится в matlabroot/sys/os/glnxa64/

Источник: https://in.mathworks.com/matlabcentral/answers/329796-issue-with-libstdc-so-6

Я попробовал, и это сработало как прелесть.

Ответ 4

Следующие работали в федоре 28 научных

> cd ~/usr/lib64
> ls libstd*

Для меня выход был

libstdc++.so.6  libstdc++.so.6.0.25

Поэтому я просто добавил псевдоним в ~/.bashrc с каталогом в libstdc++.so.6.0.25

> emacs ~/.bashrc

Напишите следующую строку в конце:

alias matlab='LD_PRELOAD=/usr/lib64/libstdc++.so.6.025  /your/dir/to/bin/glnxa64/MATLAB -desktop'

Где /your/dir/to/ - это каталог вашей установки MATLAB. затем

> source ~/.bashrc

и после этого я просто запускаю > matlab в терминале, и все в порядке.

РЕДАКТИРОВАТЬ. Добавить его в запись на рабочем столе

[Desktop Entry]
Name=Matlab R2017a
Exec=LD_PRELOAD=/usr/lib64/libstdc++.so.6.0.25 /usr/local/MATLAB/R2017a/bin/matlab -desktop &
Icon=~/username/.icons/Matlab_Logo.png
Terminal=false
Type=Application
Categories=Development;Science;Education

При открытии с рабочего стола, он загрузит соответствующий libstdc. Работает хорошо.