Błąd ładowania pliku libGL.so.1

48

Podczas próby uruchomienia różnych programów (zwłaszcza Steam i Yenka) napotkałem błąd podobny do tego: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

Korzystam z 64-bitowego systemu z kartą NVidia Optimus (uruchamiam podwójnie dla niektórych programów tylko dla systemu Windows, które wymagają dedykowanej karty graficznej). Mam zainstalowanego trzmiela i używam sterownika nvidia-current, raczej tego pobranego z NVidii, zgodnie z zaleceniami.

Biblioteka (libGL.so.1) nie jest obecna w głównym katalogu /usr/lib, jednak jest obecna /usr/lib32/nvidia-currentjako softlink do /usr/lib32/nvidia-current/libGL.so.304.64.

Sekcja danych wyjściowych z 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

Oczywiście ładowana jest biblioteka o tej nazwie, ale są one zlokalizowane /usr/lib/x86_64-linux-gnu, jednak zainstalowane oprogramowanie nie jest w stanie jej „zobaczyć”. W przypadku Steam uruchomienie go za pomocą optirun powoduje, że działa, ale w przypadku Yenki tak nie jest. Zakładam, że optirun powoduje użycie przechowywanej biblioteki /usr/lib32/nvidia-current, co pozwala na uruchomienie Steam, więc nie mogę zrozumieć, dlaczego Yenka nie działa.

Czy ktoś może wyjaśnić, dlaczego oprogramowanie nie widzi normalnej biblioteki mesa i dlaczego Yenka odmawia działania z biblioteką nvidia-current?

p0llard
źródło

Odpowiedzi:

40

Po zainstalowaniu sterowników nvidia skype szuka biblioteki i386 dostarczonej przez pakiet nvidia. Ponieważ tak nie jest, można użyć biblioteki iGL6 libGL.so.1 dostarczonej przez mesa.

Testowany na (Ubuntu-gnome raring, przy użyciu nvidia-325) i (Ubuntu-gnome pyskaty, przy użyciu nvidia-319) udało nam się to naprawić w następujący sposób:

update-alternatives --display i386-linux-gnu_gl_conf

To pokaże, jakie są dostępne opcje.

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'

więc wykonaj następujące czynności:

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

następnie wybierz najlepszą alternatywę (wybrałem i386-linux-gnu / mesa / ld.so.conf): Na poniższym wyjściu są dwie opcje dla alternatywnego i386-linux-gnu_gl_conf (zapewniając /etc/ld.so.conf. d / 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

Po zakończeniu spróbuj uruchomić:

sudo ldconfig

i gotowe.

eurythmia
źródło
2
Miałem dokładnie to samo i to działało idealnie, bardzo dziękuję (Ubuntu 13.10)
Xtremesupremacy3
denerwujące - mam tylko opcję ld.so.conf, więc uzyskaj „Istnieje tylko jedna alternatywa w grupie linków i386-linux-gnu_gl_conf (pod warunkiem /etc/ld.so.conf.d/i386-linux-gnu_GL.conf) : /usr/lib/i386-linux-gnu/mesa/ld.so.conf. Nic do skonfigurowania. ”
dez93_2000
które pakiety nvidia masz zainstalowane? Czy masz zainstalowaną bibliotekę libgl1-mesa-glx? Na zaufanym libgl1-mesa-glx: i386 zapewnia /usr/lib/i386-linux-gnu/mesa/ld.so.conf (i zasadzone biblioteki libGL.so.1 *.
eurythmia
Świetna odpowiedź. Podczas przełączania się do sterownika Nvidia pojawiały się błędy podczas uruchamiania programu Qt - QOpenGLShaderProgram::uniformLocation( matrix ): shader program is not linkedi [xcb] This is most likely caused by a broken X extension library- po tym rozwiązałem problem.
Mateusz
Dzięki. Działa również 14.04. Nie wpłynie to na żaden inny program. Czy to będzie? Jak naprawianie jednej rzeczy, łamie 10 innych.
Sudhir Khanger,
51

Mam ten sam problem po zainstalowaniu skype ... więc możesz zrobić jedną z tych rzeczy, aby naprawić ten błąd ..

1. uruchom aplikację, wykonując następujące polecenie ... na przykład uruchomiłem skype ..

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

ŹRÓDŁO

2. to, co zrobiłem

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

i dodaj w nim następujący wiersz

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

wyjście bezpieczeństwa

i na koniec biegnij

sudo ldconfig -v

mam nadzieję, że to naprawi błąd libGL.so.1, tak jak mój

Możesz także znaleźć libGL.so.1

   find / -name libGL.so.1
Qasim
źródło
W końcu udało mi się to naprawić. Niestety nie pamiętam jak, ale pamiętam, że polegało to na tworzeniu losowych dowiązań symbolicznych do biblioteki, częstym uruchamianiu ldconfig, a następnie usuwaniu wyżej wymienionych dowiązań symbolicznych. Teraz wszystko działa dobrze.
p0llard
To działało dobrze! Wreszcie! Pamiętam też, jak robiłem to, co @ jdp407 powiedział przed tymi krokami.
Gundars Mēness
1
To rozwiązanie jest dobre, ale obsługuje tylko aplikacje pojedynczo. Jeśli masz jakieś inne 32-bitowe aplikacje wymagające libGL.so, musisz powtórzyć proces dla tych aplikacji. Najlepiej jest ustawić tę preferencję globalnie, używając aktualizacji-alternatyw
eurythmia
@eurythmia Możesz również skopiować go do / lib i uruchomić sudo ldconfig, a będzie to dostęp globalny
Qasim
niestety nie działa dla mnie na Xubuntu, „ERROR: ld.so: object '/usr/lib/i386-linux-gnu/mesa/libGL.so.1' z LD_PRELOAD nie może zostać załadowany (nie można otworzyć pliku obiektu udostępnionego) : ignorowane "; skype.conf jest w etc / dbus-1 / system.d nie /ld.so.conf.d/ i wygląda na inny plik ...
dez93_2000
12

Poprawki tutaj będą działać, ale jest prostszy.

Jeśli skypenie działa, ale optirun skypedziała, możesz to naprawić za pomocą:

sudo apt-get install bumblebee-nvidia --reinstall

(Osoby używające Bumblebee z kartami AMD mogą potrzebować wykonać równoważną ponowną instalację).

Trzmiel powoduje i rozwiązuje ten problem, ale poprawka, którą stosuje, ma miejsce podczas instalacji, gdy udostępnia biblioteki libGL zarówno zintegrowanej karcie, jak i karcie o większej mocy. Nie stanie się tak, jeśli biblioteki te nie były jeszcze zainstalowane podczas instalacji Bumblebee, dlatego konieczna jest ponowna instalacja. Nie powinno to również wpływać na konfigurację trzmiela, chociaż oczywiście po sprawdzeniu warto to sprawdzić.

Jon Hanna
źródło
3
działa dla mnie dobrze ... dzięki. Ubuntu gnome 14.04
aditia
1
Zdecydowanie najłatwiejsze rozwiązanie! Wiedziałem, że ma to związek z kolejnością instalacji, ponieważ ostatnio dwukrotnie instalowałem system (Ubuntu 14.04 64bit + karta graficzna Nvidia Optimus). Po raz pierwszy zainstalowałem Skype, a następnie Bumblebee, w którym to przypadku nie miałem problemów. Drugi raz po raz pierwszy zainstalowałem Bumblebee, a potem Skype i ten problem się pojawił. Ponowna instalacja trzmieli - jak pokazano w tej odpowiedzi - rozwiązała problem!
Sicco
Jestem skłonny zgodzić się, że wydaje się to lepsze rozwiązanie niż moje.
eurythmia
2

Edytuj wpis na pulpicie:

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

Zmień Exec na:

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

Działa to:

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

przed uruchomieniem skype po uruchomieniu go za pomocą wpisu programu uruchamiającego / pulpitu.

Po tym powinno działać poprawnie, o ile uruchomisz go za pomocą programu uruchamiającego.

hazmat
źródło
Plik libGL.so.1może nie znajdować się w tej ścieżce (nie dla mnie na Debian 8 / Jessie). Aby znaleźć drogę, którą należy umieścić w LD_PRELOADłatwo znaleźć plik i386 w systemie: sudo find / -name libGL.so.1 2>/dev/null. Znalazłem to /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1i działało dobrze, używając tego jako LD_PRELOAD.
f.ardelian
1

Nie jestem pewien, czy to pomoże wyjaśnić, czy nie, ale miałem ten sam problem ze skype i libGL.so.1. Również działa 13.04 z kartą Optimus i trzmielem.

Mam problem z uruchomieniem skype bez optirun, ale działało dobrze. Właśnie zmieniłem plik pulpitu, aby uruchamiał się za pomocą optirun za każdym razem i voila. naprawiony!


źródło
Naprawdę nie naprawione, ponieważ teraz używasz bardziej energicznej karty do skype. Rzeczywiście, jeśli używasz mostu VirtualGL zamiast primus, zasadniczo spalisz tyle mocy, jakbyś nie miał zainstalowanego trzmiela i tylko przez cały czas korzystał z karty NVIDIA.
Jon Hanna
1

Miałem podobny problem i rozwiązałem go, instalując 32-bitowe biblioteki lib na moim 64-bitowym systemie: apt-get install ia32-libs

Matt
źródło
0

Pobierz najnowszą wersję z oficjalnej strony Steam, niż pozwól jej pobrać to, czego potrzebuje z terminala (jeśli jest taka potrzeba). niż dodaj ppa trzmieli, jeśli jeszcze tego nie zrobiłeś.

sudo add-apt-repository ppa:bumblebee/stable

zaktualizuj go za pomocą tego polecenia:

sudo apt-get update

i zainstaluj virtualgl(to rozwiązało problem libgl.so.1błędów dla mnie w Steam)

sudo apt-get install virtualgl
Addae Dans
źródło
0

Próbować:

sudo apt-get install libgl1-mesa-glx-lts-utopic:i386
Osioł
źródło