Вопрос или проблема
Я пытаюсь запустить приложение на Fedora 33, но когда я запускаю исполняемый файл, получаю следующую ошибку:
error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open iris (search paths /usr/lib64/dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast (search paths /usr/lib64/dri)
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 52
Current serial number in output stream: 51
Я пытался следовать обсуждению здесь: https://www.reddit.com/r/Fedora/comments/hhytvl/libgl_error_mesaloader_failed_to_open_iris/, но не смог добиться, чтобы что-то заработало.
Обратите внимание, что драйвер iris_dri.so
присутствует как в /usr/lib/dri
, так и в /usr/lib64/dri
.
Буду благодарен за любую помощь, спасибо заранее!
Я столкнулся с таким же предупреждением (но только с частью про iris) на моей системе Gentoo Linux. В моем случае решением было переустановить пакет mesa с поддержкой видеокарт iris. Вероятно, наклейка “Intel iRISx graphics” на моем ноутбуке могла бы на это намекнуть, если бы я был достаточно осведомлен, чтобы это понять.
Я не знаю, как это выглядит на системах Fedora, но что-то аналогичное (опция iris для пакета mesa?; отдельный пакет iris?) должно также помочь в вашем случае.
Проблема и ее решение объясняются здесь https://stackoverflow.com/a/71010344/6079195. В основном вам нужно заставить загружаться libstdc++.so.6 в вашей системе с приоритетом над другой версией.
Чтобы найти этот файл в вашей файловой системе:
find / -name libstdc++.so.6 2>/dev/null
Затем добавьте экспорт LD_PRELOAD в файл .bashrc, например:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
Ответ или решение
Ошибка, которую вы наблюдаете на вашей системе Fedora 33, связана с проблемой загрузки библиотек для графического драйвера. Эта проблема не нова и часто возникает у пользователей систем на базе Linux, особенно когда дело касается драйверов графики и библиотек совместимости. Давайте разберёмся в деталях и попробуем найти решение.
Теория
Начнем с понимания, что представляет собой ошибка. Ошибки, перечисленные вами, указывают на проблемы с загрузкой графических драйверов, в частности, драйверов iris
и swrast
. Похоже, ваша система не может найти или правильно подключить эти драйверы для использования OpenGL. Эта ситуация может возникать по нескольким причинам:
-
Отсутствие необходимых библиотек: Сообщение об ошибке "libGL error: MESA-LOADER: failed to open iris" указывает на невозможность найти и загрузить графическую библиотеку
iris_dri.so
. Ваша система ищет эту библиотеку в директориях/usr/lib64/dri
и, возможно, других. -
Проблемы с совместимостью библиотек: Ошибка может также быть связана с несовместимостью между версиями библиотек, например,
libstdc++.so.6
, которая может быть не той версии, которую ожидает приложение или драйвер. -
Конфликт версий драйверов: Может происходить конфликт между несколькими версиями драйверов или между драйверами, установленными из разных источников.
Пример
Рассмотрим пример с системой Gentoo, как указано в вашем вопросе. В этом случае, пользователь решил проблему, переустановив пакет mesa
с поддержкой для графических карт Intel iRIS. Это подтверждает, что проблема может быть связана с неполной или неправильно конфигурированной установкой пакетов, необходимых для правильной работы драйверов.
Применение
Теперь давайте рассмотрим, какие действия могут помочь решить вашу проблему на Fedora 33:
-
Установка недостающих пакетов: Убедитесь, что все необходимые пакеты установлены и правильно настроены. В Fedora пакеты, связанные с
mesa
, можно установить или обновить с помощью следующей команды:sudo dnf install mesa-dri-drivers mesa-libGL mesa-libEGL
Также, дополнительная установка пакетов графических драйверов Intel может быть полезна:
sudo dnf install xorg-x11-drv-intel
-
Проверка на наличие библиотек: Убедитесь, что библиотеки, такие как
libnsl.so.1
иlibstdc++.so.6
, установлены в системе. В случае отсутствия, их можно установить:sudo dnf install libnsl libstdc++
-
Конфигурация LD_PRELOAD: Если проблема кажется связанной с
libstdc++.so.6
, как указано в вашем вопросе, вы можете принудительно задать путь для этой библиотеки, добавив следующее в ваш файл конфигурации.bashrc
:export LD_PRELOAD=/usr/lib64/libstdc++.so.6
После внесения изменений перезапустите терминал или выполните команду
source ~/.bashrc
, чтобы применить изменения. -
Проверка наличия конфликтов и совместимости: Убедитесь, что на вашей системе нет конфликтующих версий драйверов или библиотек. Это может потребовать удаления устаревших или дублирующих версий:
sudo dnf autoremove
-
Изучение более детальных логов и документации: Просмотрите системные логи командой
dmesg
илиjournalctl
для получения более детальной информации о возникновении ошибок. Эти логи могут предоставить дополнительные подсказки о конкретных проблемах, связанных с оборудованием или конфигурацией системы.
Подытоживая, необходимо убедиться, что все необходимые компоненты установлены и сконфигурированы правильно, а также устранить возможные конфликты версий и совместимости. Система Fedora и другие дистрибутивы Linux предоставляют мощные инструменты для управления пакетами и зависимостями, и правильное их использование сможет помочь устранить большинство проблем с графическими драйверами. Если вышеприведенные шаги не помогли, возможно, стоит обратиться на форумы сообщества Fedora или к документации Mesa для получения более специализированной помощи.