Сбой Matlab с установленной локальной glibc2.34

Вопрос или проблема

У меня установлены Ubuntu 20.04 и Matlab 2023b.

Когда я запускаю Simulink (часть Matlab), программа выдает ошибку:

Обнаружена несоответствие ld.so: ../elf/dl-tls.c: 517: _dl_allocate_tls_init: Условие 'listp != NULL' не выполнено!,
что является известной проблемой с новыми версиями Matlab на Linux с glibc старше 2.34.

Официальное исправление ошибки, предложенное MathWorks, состоит в том, чтобы исправить glibc для всей вашей ОС, что в моем случае не желательно.

Я видел одно решение, которое было бы мне подходящим, а именно установить glibc 2.34 локально и затем добавить его путь в переменную LD_LIBRARAY_PATH только во время запуска Matlab, что позволит лишь Matlab использовать другую версию glibc.

Я следовал этим шагам, чтобы установить glibc 2.34 локально. Я подтвердил, что это работает, с помощью команды:

user@hostname[~]: ~/glibc/glibc-2.34-install/bin/ldd --version
ldd (GNU libc) 2.34
Copyright (C) 2021 Free Software Foundation, Inc.
Это программное обеспечение является бесплатным; условия копирования описаны в источниках.
Авторы не предоставляют НИКАКИХ гарантий, включая гарантии ПРОДАЖИ или УТОЧНЕНИЯ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ.
Авторы: Роланд Макарат и Ульрих Дреппер.

Но после добавления glibc/lib в LD_LIBRARAY_PATH я получил ошибку сегментации на простых бинарниках, таких как ls:

user@hostname[~/glibc]❯ export LD_LIBRARY_PATH="/home/dsadowsk/glibc/glibc-2.34-install/lib:$LD_LIBRARY_PATH"
user@hostname[~/glibc]❯ ls
Ошибка сегментации
user@hostname[~/glibc]❯ /opt/matlab/R2023b/bin/matlab
Ошибка сегментации

Это выглядит точно так же, как эта проблема, но, к сожалению, я не очень хорошо понимаю, как работает решение, и оно не работает для Matlab, как и для команды ls.

user@hostname[~/glibc]❯ /lib64/ld-linux-x86-64.so.2 --library-path /lib64 /bin/ls
build  glibc-2.34  glibc-2.34-install  glibc-2.34.tar.gz
user@hostname[~/glibc]❯ /lib64/ld-linux-x86-64.so.2 --library-path /lib64 /opt/matlab/R2023b/bin/matlab
/opt/matlab/R2023b/bin/matlab: ошибка при загрузке общих библиотек: /opt/matlab/R2023b/bin/matlab: неверный заголовок ELF

Как я могу запустить бинарник Matlab с установленной локально glibc 2.34, а не для всей моей системы?

Спасибо за любые мысли, которые у вас есть.

Ответ или решение

Решение проблемы с MatLab, связанным с локальной установкой glibc 2.34 на Ubuntu 20.04

Ваша проблема с MatLab (версия R2023b) на Ubuntu 20.04 связана с конфликтом версий glibc. Ошибка о несоответствии, с которой вы столкнулись, связана с тем, что MatLab не поддерживает glibc ниже версии 2.34. Ниже приведено ваше текущее состояние и возможные решения, которые помогут обойти данную проблему без глобальной замены glibc в операционной системе.

Проблема

Вы установили glibc 2.34 локально и изменили переменную окружения LD_LIBRARY_PATH, чтобы указать на данную библиотеку, но это привело к ошибкам сегментации, как при запуске команд, таких как ls, так и MatLab.

Причины

Проблема возникает из-за того, что библиотеки glibc, используемые в других программах, могут столкнуться с конфликтами при загрузке. Изменение LD_LIBRARY_PATH может привести к невозможности правильной загрузки динамически связанных библиотек, которые требуется загрузить для работы системных команд и приложений.

Рекомендации

  1. Убедитесь, что вы правильно указываете путь к glibc:
    При использовании локальной версии glibc важно не только указать путь в LD_LIBRARY_PATH, но и убедиться, что вы не мешаете системе загружать свои стандартные библиотеки.

  2. Используйте локальный загрузчик (dynamic loader):
    Вместо того чтобы полагаться только на LD_LIBRARY_PATH, попробуйте использовать локальный загрузчик, чтобы запустить MatLab с правильным образом загружаемым пространством. Например:

    /home/dsadowsk/glibc/glibc-2.34-install/lib/ld-linux-x86-64.so.2 --library-path /home/dsadowsk/glibc/glibc-2.34-install/lib:/lib/x86_64-linux-gnu /opt/matlab/R2023b/bin/matlab

    Обратите внимание, что вам нужно указать как вашу локальную библиотеку, так и стандартные библиотеки системы.

  3. Проверка на наличие проблем с ELF заголовками:
    Убедитесь, что библиотеки, которые вы скопировали или установили, соответствуют архитектуре вашей системы (например, x86_64). Несоответствующая архитектура может привести к ошибкам, подобным "invalid ELF header".

  4. Создание контейнера:
    Если вышеуказанные шаги не помогают, вы можете рассмотреть возможность использования контейнеризации с помощью Docker. Это позволит вам создать изолированное пространство, в котором будет установлена необходимая версия glibc, не влияя на вашу основную систему.

    Пример Dockerfile:

    FROM ubuntu:20.04
    RUN apt-get update && apt-get install -y build-essential
    # Команды по установке вашей версии glibc
  5. Логи и сообщения об ошибках:
    Важно сохранять логи ошибок и сообщения, возникающие при запуске, так как они могут помочь в дальнейшем диагностировании проблемы.

Заключение

Работа с динамическими библиотеками может быть сложной, особенно когда требуется использование специфических версий. Следуя указанным рекомендациям, вы сможете обойти проблему конфликта библиотек и успешно запустить MatLab с необходимой версией glibc. Если проблема сохраняется, рассмотрите возможность обращения в техническую поддержку MathWorks или к сообществу, специализирующемуся на подобной проблематике.

Оцените материал
Добавить комментарий

Капча загружается...