Проблемы с libGl, fbConfigs, swrast через каждое обновление?


38

У меня проблемы при компиляции SFML-проекта (не вижу графики):

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

Эта ошибка может быть решена простой переустановкой nvidia-драйверов через этот учебник: https://askubuntu.com/a/451248/341889

... но когда я получаю новые обновления - эта ошибка возвращается; (Что мне делать? Это не решение - не использовать обновление системы ...

PS и да, я сохранил все изменения после установки nvidia-драйверов


1
Это происходит со мной , если я пытаюсь запустить OpenGL исполняемых динамически загрузки Мес libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. По умолчанию мой Ubuntu 16.04 использует /usr/lib/nvidia-361/libGL.soиз-за /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confи все работает нормально.
Чиро Сантилли 新疆 改造 中心 法轮功 六四

Ответы:


29

swrastДело в том , программное обеспечение визуализации. Это означает, что он не находит аппаратный драйвер для вашей видеокарты. Установлено несколько библиотек libGL и несколько символических ссылок на эти библиотеки. Чтобы увидеть это запустите это из оболочки:

find /usr -iname "*libGL.so*" -exec ls -l -- {} + 

Теперь вероятная причина вашей проблемы в том, что установка графических драйверов иногда нарушает эти символические ссылки. (В частности, /usr/local/lib/libGL.so.1.2.0это может быть либо неправильная библиотека, либо sym-ссылка на неправильную ссылку).

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

LIBGL_DEBUG=verbose glxgears

Надеюсь, что это не так, как SFML. С LIBGL_DEBUGего помощью вы должны узнать, какую библиотеку OpenGL она пытается загрузить. Более того, /usr/local/lib/libGL.so.1.2.0библиотека, которую он будет пытаться загрузить, почти наверняка будет (Редактировать: это была стандартная библиотека OpenGL на моей машине, когда я отвечал на это. Возможно, сейчас это какая-то другая версия на вашей машине).

Поэтому решение (в данном случае) состоит в том, чтобы убедиться, что /usr/local/lib/libGL.so.1.2.0это символическая ссылка, указывающая на правую библиотеку OpenGL. В моем случае у меня есть драйвер Nvidia 3.40, поэтому я запустил:

ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0

Но вы захотите указать на подходящую для вас библиотеку OpenGL (указанную в первой команде поиска).

Итак, установка (проприетарных) графических драйверов может нарушить символические ссылки, используемые для библиотек OpenGL. Для решения этой проблемы вручную исправьте символические ссылки (исправьте в /usr/local/lib/libGL.so.1.2.0первую очередь).


Эта проблема помогла мне понять сообщение об ошибке, но не исправить его. Ответ «Переустановка драйверов nvidia» помог мне хорошо дополнить его, поскольку он действительно решил проблему для меня.
henko

@henko да переустановка драйверов nvidia, наверное, самый быстрый и простой способ разобраться в этом. Вернитесь к этому подходу, если по какой-либо причине переустановка драйверов не решит вашу проблему и вам нужно испачкать руки.
сумасшедший ежик

6
Я понял каждую часть, кроме «почти наверняка быть /usr/local/lib/libGL.so.1.2.0». Мой показывает "libGL: OpenDriver: пытается /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: пытается /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" и все эти файлы существуют в моей системе ...
Самуэль Ли

1
Еще раз спасибо за ваше объяснение; Я лучше понимаю проблему. Я также хочу отметить, что в моем случае в ubuntu swrast.so есть подтвержденная ошибка , и люди обсуждают ее.
Самуэль Ли

1
Спасибо @dementedhedgehog. Это был великолепно сформулированный пост, который помог мне решить мою проблему (кстати, на Fedora-25). знак равно Up-голосование.
NYCeyes

5

У меня была та же проблема на Ubuntu 16.10 с nvidia-340драйверами, и ни одно из решений здесь не помогло мне.

Оказывается, 32-битные библиотеки не были на пути к библиотеке.

Этот лайнер работал на меня:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-340"

4

У меня были проблемы с получением правильной символической ссылки, указывающей на драйвер nVidia, и я нашел другой способ, который работает для меня.

Это изложено здесь .

И это перечисляет, как установить драйвер nVidia через PPA, который доступен для 349.16, последней версии.

Сначала удалите все установленные драйверы nVidia, открыв окно терминала ( Ctrl+ ALT+ T) и напечатав

sudo apt-get remove nvidia*

Перезагрузите вашу систему

Затем откройте другой терминал и введите следующее

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-349 nvidia-settings
sudo add-apt-repository -r ppa:xorg-edgers/ppa

Затем перезагрузите снова

Я попробовал это после того, как заблудился с символическими ссылками, и steam работал нормально сразу после установки драйвера, и снова он все еще работал после того, как у меня было 400 с лишним обновлений системы.


2
Я бы не советовал оставлять xorg-edgers ppa после установки драйвера. Много нестабильных пакетов придет в обновлениях.
Pilot6

просто удаление nvidia * уже решило эту проблему для меня!
xtofl

3

В качестве альтернативы ответу Адриана: если вы предпочитаете использовать проприетарные драйверы, поставляемые напрямую от NVIDIA, а не те, которые есть в PPA, установка (или в моем случае переустановка) последней проприетарной версии драйвера может помочь устранить ошибку swrast.

Если у вас еще нет драйвера NVIDIA, загрузите драйвер с веб-сайта NVIDIA . Далее, переключитесь на tty ( ctrl+ alt+ F1) и выключите ваш менеджер входа в систему:

Если вы используете lightdm, $ sudo service lightdm stop

Если использовать GDM, $ sudo service gdm stop

Перейдите к сценарию установки, запустите его и следуйте инструкциям. Не беспокойтесь, если предустановочный скрипт завершится неудачно. Я всегда принимаю регистрацию DKMS и 32-битных библиотек совместимости. После установки драйвера перезагрузите компьютер:

$ sudo reboot

Если у вас уже есть скрипт установки из более старого драйвера NVIDIA, просто запустите скрипт установки драйвера NVIDIA, как указано выше, но с опцией «--update»:

$ sudo ./NVIDIA-Linux-x86_64-***.**.run --update

Это даст вам самую последнюю версию драйвера.

Это исправило мою libGL error: failed to load driver: swrastошибку.


3

На Ubuntu 18 возникла та же проблема. Это произошло в основном только с 32-битными приложениями. Поэтому моя идея заключалась в том, чтобы установить 32-битную nvidia, поскольку моя папка / usr / lib / i386-linux-gnu / была подозрительно пустой.

После очень немногих попыток это решило мою проблему с паром и вином, не начинающимся:

sudo apt install libnvidia-gl-418:i386

(и измените 418 на ту версию, которая у вас есть)

Интересно, что приложения не жаловались на отсутствие зависимостей при установке.


Похоже, это решило одну из моих проблем, связанных с вопросом, по крайней мере ...
Андрей

Это 32-битный может быть, почему. Другие программы работают нормально, но они, вероятно, 64-битные. Тем не менее, это прекрасно работает (хотя мне пришлось столкнуться с версией)
Зои

2

Я должен признать, я не уверен, почему это работает для меня, но это сработало. В этом конкретном случае «исправление» записей ld.so.conf.d путем добавления новой записи работает следующим образом:

sudo ln -s /usr/lib/nvidia-381/ld.so.conf /etc/ld.so.conf.d/nvidia64.conf
sudo ldconfig 

Это имеет смысл, пока вы не запустите следующее find:

$ find -L /etc/ld.so.conf.d -type f | xargs grep -i nvidia
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib32/nvidia-381

Почему иметь одинаковые записи в трех экземплярах, но не в двух экземплярах, я понятия не имею!


У меня работает на Убуну 17.04. Просто примечание - путь / usr / lib / nvidia-xxx, где xxx - номер драйвера, поэтому адаптируйте команду под него.
user2082382

2

Вот aptединственное решение, которое сработало для меня, без каких-либо ссылок или шуток ld.so.conf.d:

apt install --reinstall libgl1-mesa-glx:i386
apt install mesa-utils nvidia-driver nvidia-driver-libs-i386

1

Я просто использую эту строку:

 sudo rm /usr/lib/i386-linux-gnu/libGL.so.1

и это работает.

Потому что я вижу такой ввод, когда я выполняю sudo ldconfig -p | grep -i gl.so:

libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
libOpenGL.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so
libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1
libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1
libEGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so

1
Должны ли люди следовать тому, что это значит ...?
Андрей

Работает на меня, спасибо!
Хетт

0

Просто запустите это:

sudo apt-get install libnvidia-gl-(the version of your driver):i386

Версия вашего драйвера указана в nvidia-settings.


0

В моем случае решение этой проблемы состояло в продолжении сообщения об ошибке

Paraview 5.7.0 сообщил мне, что:

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
(   0.833s) [paraview] vtkOpenGLRenderWindow.c:748 ERR| vtkXOpenGLRenderWindow (0x5588ae6a2160): GLEW could not be initialized: Missing GL version
...
Segmentation fault

Сообщение

GLEW could not be initialized: Missing GL version

был ключевым. Я запускаю 'glxgears', чтобы проверить, что графические библиотеки работают нормально - см. Также man glxgears- показ этой анимации:

скриншот glxgears

Тогда мое решение было просто установить переменную среды

LD_PRELOAD=/usr/lib/libGL.so

Принять к сведению:

  1. Хотя у меня есть видеокарта Nvidia, мне не нужно было возиться с ней;
  2. Запуская locate libGL.so, я нахожу другого кандидата /usr/lib/i386-linux-gnu/libGL.so. Однако установка этого параметра в LD_PRELOAD не устранила проблему;
  3. Нет необходимости устанавливать какую-либо информацию о появившейся выше библиотеке GLEW --- см. locate libGLEW.so

Я в долгу перед https://github.com/openai/mujoco-py/issues/44 за подсказки


Разницу между LD_PRELOAD и более часто цитируемым LD_LIBRARY_PATH можно найти на stackoverflow.com/q/14715175/5459638
XavierStuvw

-3

Я столкнулся с этой странной проблемой, когда я подключился к своей Ubuntu VM с моего Macbook Pro, но установка приведенного ниже драйвера Nvidia на мою Ubuntu 16.04 устранила проблему. Надеюсь, что это работает для вас.

sudo apt-get установить nvidia-331


1
Зачем вам устанавливать драйверы Nvidia GPU на гостевую систему виртуальной машины? Ó_ò
Дэвид Фёрстер

Понижение не подходит. @DavidFoerster прав в том, что установка драйверов графического процессора в виртуальной машине не имеет никакого смысла (если только вы не пропустили оборудование графического процессора в виртуальную машину). Но: я запускаю X по SSH и столкнулся с той же проблемой. Запуск приложений X на удаленной машине (ВМ) почти всегда приводит к сообщениям об ошибках, упомянутых в вопросе ОП. Я еще не нашел решения этой проблемы, но если бы установка драйверов GPU на удаленной виртуальной машине была бы решением, я бы сделал это, независимо от того, имеет ли это смысл, просто чтобы устранить эти ошибки (я в данный момент игнорирую их).
Бинар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.