Ошибка загрузки libGL.so.1

48

При попытке запустить различные части программного обеспечения (особенно Steam и Yenka), я столкнулся с ошибкой, подобной этой: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

Я использую 64-битную систему с картой NVidia Optimus (я использую двойную загрузку только для некоторых программ Windows, для которых требуется выделенная видеокарта). У меня установлен шмель, и я использую драйвер nvidia-current, а не драйвер, скачанный с NVidia, как рекомендовано.

Библиотека (libGL.so.1) отсутствует в верхнем каталоге /usr/lib, однако она присутствует в /usr/lib32/nvidia-currentвиде программной ссылки на /usr/lib32/nvidia-current/libGL.so.304.64.

Раздел вывода из ldconfig -p:

libGL.so.1 (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/libGL.so
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so

Очевидно, что библиотека с таким именем загружается, но они находятся в ней /usr/lib/x86_64-linux-gnu, однако установленное программное обеспечение, похоже, не может ее «увидеть». Для Steam запуск его с помощью optirun заставляет его работать, но это не относится к Yenka. Я предполагаю, что optirun заставляет использовать хранимую библиотеку /usr/lib32/nvidia-current, что позволяет запускать Steam, поэтому я не могу понять, почему Yenka не запускается.

Кто-нибудь может объяснить, почему программное обеспечение не может видеть обычную библиотеку mesa и почему Yenka отказывается работать с библиотекой nvidia-current?

p0llard
источник

Ответы:

40

С установленными драйверами nvidia скайп ищет lib i386, предоставляемый пакетом nvidia. Так как этого не существует, можно использовать i386 libGL.so.1, предоставленный mesa.

Протестировано на (ubuntu-gnome raring, используя nvidia-325) и (ubuntu-gnome saucy, используя nvidia-319) мы смогли это исправить следующим образом:

update-alternatives --display i386-linux-gnu_gl_conf

Это покажет вам, какие есть доступные варианты.

i386-linux-gnu_gl_conf - auto mode
  link currently points to /usr/lib/nvidia-325/alt_ld.so.conf
/usr/lib/i386-linux-gnu/mesa/ld.so.conf - priority 500
  slave i386-linux-gnu_xorg_extra_modules: /usr/lib/i386-linux-gnu/xorg/x11-extra-modules
/usr/lib/nvidia-325/alt_ld.so.conf - priority 8602
Current 'best' version is '/usr/lib/nvidia-325/alt_ld.so.conf'

Итак, сделайте следующее:

sudo update-alternatives --config i386-linux-gnu_gl_conf

затем выберите лучшую альтернативу (я выбрал i386-linux-gnu / mesa / ld.so.conf): в выходных данных ниже есть два варианта альтернативы i386-linux-gnu_gl_conf (предоставляя /etc/ld.so.conf. д / i386-Linux-gnu_GL.conf).

  Selection    Path                                     Priority   Status
------------------------------------------------------------
* 0            /usr/lib/nvidia-325/alt_ld.so.conf        8602      auto mode
  1            /usr/lib/i386-linux-gnu/mesa/ld.so.conf   500       manual mode
  2            /usr/lib/nvidia-325/alt_ld.so.conf        8602      manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/i386-linux-gnu/mesa/ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode

После этого попробуйте запустить:

sudo ldconfig

и тогда вы сделали.

eurythmia
источник
2
У меня было точно так же, и это работало отлично, большое спасибо (Ubuntu 13.10)
Xtremesupremacy3
раздражает - у меня есть только опция ld.so.conf, так что получайте "Есть только одна альтернатива в группе ссылок i386-linux-gnu_gl_conf (предоставляя /etc/ld.so.conf.d/i386-linux-gnu_GL.conf) : /usr/lib/i386-linux-gnu/mesa/ld.so.conf. Ничего не настраивать. "
dez93_2000
какие пакеты nvidia у вас установлены? У вас установлен libgl1-mesa-glx? На верном libgl1-mesa-glx: i386 предоставляет /usr/lib/i386-linux-gnu/mesa/ld.so.conf (и связанные библиотеки libGL.so.1 * *.
эвритмия
Отличный ответ. Я получал ошибки при запуске программы Qt после переключения на драйвер Nvidia - QOpenGLShaderProgram::uniformLocation( matrix ): shader program is not linkedи [xcb] This is most likely caused by a broken X extension library- и после этого все прояснилось.
Мэтью Прочитано
Благодарю. Работает и 14.04 тоже. Это не повлияет на любую другую программу. Будет ли он? Как исправление одной вещи ломает 10 других.
Судхир Хангер
51

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

Первый - запустить приложение, выполнив следующую команду ... например, я запускаю скайп ..

LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1 skype

ИСТОЧНИК

2-й, что я сделал

sudo nano /etc/ld.so.conf.d/skype.conf

и добавьте в него следующую строку

/usr/lib/i386-linux-gnu/mesa/

сохранить и выйти

и, наконец, запустить

sudo ldconfig -v

Я надеюсь, что это исправит вашу ошибку libGL.so.1, как это сделал мой

Вы также можете найти libGL.so.1

   find / -name libGL.so.1
Касим
источник
Мне удалось это исправить в конце. К сожалению, я не могу вспомнить, как, но я помню, что он состоял из создания случайных символических ссылок на библиотеку, многократного запуска ldconfig и последующего удаления вышеупомянутых символических ссылок. Теперь все отлично работает.
p0llard
Это работало нормально! В заключение! Кроме того, я помню, как делал то, что сказал @ jdp407 перед этими шагами.
Гундарс Мессн
1
Хотя это решение хорошо, оно обрабатывает приложения только по одному за раз. Если у вас есть другие 32-битные приложения, для которых требуется libGL.so, вам придется повторить процесс для этих приложений. Лучше всего установить это предпочтение глобально, используя альтернативы обновления
eurythmia
@eurythmia Вы также можете скопировать его в / lib и запустить sudo ldconfig, и это будет глобальный доступ
Qasim
к сожалению, не работает для меня в xubuntu, «ОШИБКА: ld.so: object '/usr/lib/i386-linux-gnu/mesa/libGL.so.1' из LD_PRELOAD не может быть предварительно загружена (не может открыть общий объектный файл) : игнорируется "; Файл skype.conf находится в etc / dbus-1 / system.d, а не в /ld.so.conf.d/ и выглядит как другой файл ...
dez93_2000
12

Исправления здесь будут работать, но есть и более простая.

Если skypeне работает, но optirun skypeработает, то вы можете это исправить с помощью:

sudo apt-get install bumblebee-nvidia --reinstall

(Людям, использующим Bumblebee с картами AMD, может потребоваться аналогичная переустановка).

Шмель одновременно вызывает и устраняет эту проблему, но исправление, которое он применяет, происходит при установке, когда он делает библиотеки libGL доступными для интегрированной карты, а также для более мощной карты. Этого не произойдет, если эти библиотеки еще не были установлены, когда вы установили Bumblebee, поэтому требуется переустановка. Это не должно повлиять на конфигурацию вашего шмеля, хотя, очевидно, стоит проверить после того, как вы это сделаете.

Джон Ханна
источник
3
это хорошо работает для меня ... спасибо. Убунту гном 14.04
адития
1
Определенно самое простое решение! Я знал, что это как-то связано с порядком установки, так как недавно я дважды переустанавливал систему (64-битная Ubuntu 14.04 + видеокарта Nvidia Optimus). В первый раз я сначала установил скайп, а затем шмель, и в этом случае у меня не было проблем. Во второй раз я сначала установил Bumblebee, а затем Skype, и эта проблема возникла. Простая переустановка Bumblebee-NVIDIA, как показано в этом ответе, решила проблему!
Сикко,
Я склонен согласиться, что это кажется лучшим решением, чем мое.
эвритмия
2

Отредактируйте запись на рабочем столе:

sudo nano /usr/share/applications/skype.desktop

Измените Exec на:

Exec=env PULSE_LATENCY_MSEC=60 LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1 skype %U

Это работает:

LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1

перед запуском скайпа, когда вы запускаете его с записью запуска / рабочего стола.

После этого он должен нормально работать, если вы запустите его с помощью панели запуска приложений.

HazMat
источник
Файл libGL.so.1может быть не по этому пути (это не для меня, в Debian 8 / Jessie). Для того, чтобы найти путь , который вы должны положить в LD_PRELOADпросто найти файл i386 на вашей системе: sudo find / -name libGL.so.1 2>/dev/null. Я нашел его, /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1и он работал нормально, используя это как LD_PRELOAD.
f.ardelian
1

Я не уверен, поможет ли это прояснить или нет, но у меня была та же проблема со скайпом и libGL.so.1. Также работает 13.04 с картой Optimus и шмелем.

У меня возникла проблема с запуском скайпа без optirun, но он работал нормально. Я просто изменил файл рабочего стола для запуска с optirun каждый раз и вуаля. исправлено!


источник
Не совсем исправлено, так как теперь вы используете более жадную до энергии карту для скайпа. Действительно, если вы используете мост VirtualGL, а не primus, вы, по сути, будете сжигать столько энергии, сколько если бы у вас не был установлен шмель, а вы просто постоянно использовали карту nvidia.
Джон Ханна
1

У меня была похожая проблема, и я решил ее, установив 32-битные библиотеки в моей 64-битной системе: apt-get install ia32-libs

Matt
источник
0

Загрузите последнюю версию с официальной страницы Steam, затем дайте ей загрузить то, что ей нужно, из терминала (если есть необходимость). чем добавить шмеля ppa, если вы еще этого не сделали.

sudo add-apt-repository ppa:bumblebee/stable

обновите его с помощью этой команды:

sudo apt-get update

и установить virtualgl(это решило проблему с libgl.so.1ошибками для меня в Steam)

sudo apt-get install virtualgl
Аддей Данс
источник
0

Пытаться:

sudo apt-get install libgl1-mesa-glx-lts-utopic:i386
осел
источник