Проблемы с 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.