Nie udało się załadować libGL.so na Androida

82

Używam Ubuntu 12.04 (Precise Pangolin) z Oracle JDK 7, a kiedy używam emulatora Androida z Eclipse , wyświetla ten błąd:

[2012-07-04 02:52:10 - Emulator] error libGL.so: cannot open shared object file: No such file or directory 
[2012-07-04 02:52:10 - Emulator] Failed to load libGL.so

Również emulator działa bardzo wolno. Jak mogę rozwiązać ten problem?

php.khan
źródło

Odpowiedzi:

82

Mam zainstalowany Android SDK w ~ / android-sdk-linux_x86, więc zrobiłem:

ln -s /usr/lib/libGL.so.1 ~/android-sdk-linux_x86/tools/lib/libGL.so

To rozwiązuje błędy, tak jak robi to linkowanie do / usr / lib, ale nie wymaga rootowania i nie powoduje bałaganu z podstawowymi katalogami systemowymi.

user1410657
źródło
5
To w połączeniu z poleceniem „apt-get” biblioteki libo jest tutaj najczystszym rozwiązaniem.
Dave Cameron
Jeśli nie masz jeszcze libGL.so.1, być może będziesz musiał skorzystać z rozwiązania libo, ale jest to najczystsze miejsce do połączenia pliku. Nie ma potrzeby umieszczania 32-bitowych w 64-bitowych bibliotekach ....
Ajax,
23
locate libGLna początku może pomóc
yuan
2
Kiedyś find / -name 'libGL.so.1'i znajduje go w /usr/lib/x86_64-linux-gnusprawie debian jessie.
Justin Skiles,
35

W 64-bitowym systemie Ubuntu 12.04 zrób to w następujący sposób:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Źródło: instalowanie wymaganych pakietów (Ubuntu 12.04)

libo
źródło
2
to zepsuło mój system
Alexandros
Ta odpowiedź w połączeniu z odpowiedzią - askubuntu.com/a/144194 do rozwiązywania zależności (użyj aptitude, aby zlokalizować zależność i zobaczyć, co powoduje problem) i ostatecznie uruchom polecenie, sudo apt-get install --reinstall gcc-4.7-multilibjak znalazłem w odpowiedzi askubuntu.com/a/236114
Aleks
Najpierw musiałem wykonać „sudo apt-get install libglapi-mesa”, a następnie „sudo apt-get install libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386”
stackOverlord
Myślę, że nie musiałem instalować libGL na x86, wystarczyło użyć ./sdk/tools/emulator64-x86? (uwaga '64')
jcarballo
1
O rany, publikowanie ogromnych linii aplikacji bez żadnego wyjaśnienia lub ostrzeżenia nie jest dobre.
Sebastian Mach,
32

Używam Ubuntu 12.04 w wersji 64-bitowej. Użyj następującego polecenia, aby rozwiązać problem

 sudo ln -s /usr/lib32/fglrx/libGL.so.1.2 /usr/lib/libGL.so

Uwaga : dotyczy to tylko tych, którzy używają sterowników graficznych AMD / ATI.

user1289608
źródło
1
U mnie też to zadziałało, myślę, że działa to tylko w przypadku kart ATI. Jest to technicznie błędne, ponieważ dowiązuje 32-bitową bibliotekę współdzieloną do katalogu (64-bitowego) / lib /, ale wygląda na to, że emulator Androida będzie szukał tam tylko tej biblioteki.
Alex Pretzlav
3
Poleciłbym przeszukać plik libGL.so i dostosować polecenie link w oparciu o lokalizację. Mój
przypadek
2
Mój był pod adresem /usr/lib/x86_64-linux-gnu/mesa/libGL.so, ale powodował błąd, gdy próbowałem uruchomić, ponieważ potrzebował biblioteki 32-bitowej i dostarczyłem bibliotekę 64-bitową
Ben McCann
32

W przypadku 32-bitowego Ubuntu 12.04 LTS zadziałało to:

sudo apt-get install libgl1-mesa-dev

Żadne z poniższych nie zadziałało:

cd /usr/lib/i386-linux-gnu/mesa/
sudo ln -s libGL.so.1.2 libGL.so 
sudo ln -s libGL.so.1.2 /usr/lib/libGL.so
ln -s libGL.so.1.2 ~/android/android-sdk-linux/tools/lib/libGL.so
Smok Drewna
źródło
Działa z 13.04. Zauważ, że jeśli umieścisz link symboliczny w katalogu tools / lib, musisz go ponownie usunąć.
Perseids,
2
Polecenie apt-get działało również w systemie Ubuntu 13.04 x64, nie ma potrzeby używania łącza symbolicznego.
Jason McVetta
14

To, co działa dla mnie (ubuntu 12.04 64bit), to tylko uruchomienie:

    sudo apt-get install libgl1-mesa-dev

Okazało się, że libGL.soistnieje w katalogu/usr/lib/x86_64-linux-gnu/

Instalacja wersji 32-bitowej nie działała.

Frank AFRIAT
źródło
6

W 64-bitowym Ubuntu 12.04 nie ma / usr / lib64. Jest to tylko / usr / lib. Ponadto na moim komputerze nie ma libGL.so. Zamiast tego plik to libGLEW.so

Aby zainstalować /usr/lib/LibGL.so, możesz uruchomić: sudo apt-get install libgl1-mesa-dev

Jednak nie rozwiązało to problemu. W rzeczywistości prawdopodobnie schrzanił mój system.

inder
źródło
Sprawdzone w Synaptic, libgl1-mesa-dev instaluje libGL.so do /usr/lib/x86_64-linux-gnu/libGL.so
sergio91pt.
1
GLEW to inna biblioteka, OpenGL Extension Wrangler . To nie jest „zamiast tego”, jest to coś, czego programy mogą używać oprócz libGL.
Wyzard
4

To zadziałało dla mnie na 64-bitowym Ubuntu 12.10 i pakiecie ADT:

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 ~/adt-bundle-linux-x86_64/sdk/tools/lib/libGL.so

Jeśli nie masz, /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1po prostu zainstalujlibgl1-mesa-glx

sudo apt-get install libgl1-mesa-glx
marcantonio
źródło
4

Myślę, że dobrze zrozumiałem, żadnych ostrzeżeń i spowolnienia ... To może jednak nie działać z zastrzeżonymi sterownikami.

Upewnij się, że libgl1-mesa-glx: i386 jest zainstalowany (nawet jeśli masz plik SO x64). Następnie wykonaj:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
sergio91pt
źródło
3

NVidia Optimus:

Działając na podwójnej grafice (Intel i nvidia), użyłem:

  1. Zainstaluj Bumblebee (patrz: https://wiki.ubuntu.com/Bumblebee#Installation )
  2. Zainstaluj wymagane lib.
  3. Uruchom emulator na dyskretnej karcie nvidia.

To powinno załatwić sprawę:

sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update 
sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic 
sudo apt-get install ia32-libs

Gdy chcesz uruchomić emulator, po prostu użyj optirun:

optirun emulator @<avd_name>

Powinienem ostrzec, że wczoraj zainstalowałem Linuksa. Więc tak naprawdę nie wiem, co robię….

user1860888
źródło
3

Odnosząc się do http://developer.android.com/sdk/installing/index.html , zainstalowałem ia32-libs i zrobiłem:

ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/i386-linux-gnu/mesa/libGL.so

To wszystko, co zrobiłem, aby rozwiązać ten problem.

gridstation
źródło
Fajnie, ale /usr/lib/x86_64-linux-gnu/mesazamiast tego musiałem użyć
Joril
3

Używam Linux Mint 14 - 64 bit i dla mnie zadziałało :):

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev
jAbreu
źródło
2

W 64-bitowym systemie Ubuntu 12.04, GNOME 3.4, najpierw odniosłem się do http://developer.android.com/sdk/installing/index.html i zainstalowałem ia32-lib, które wygeneruje / usr / lib / i386-linux-gnu /mesa/libGL.so.1.2.0

Następnie uruchomiłem poniższe polecenie i rozwiązałem ten problem:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so

To trochę różni się od odpowiedzi Gridstation.

Wydaje mi się, że nie ma potrzeby instalowania lokalnie sterownika Mesa, co może powodować problemy z prawdziwymi sterownikami wideo.

Kevin Zhu
źródło
2

W 64-bitowym systemie Ubuntu

1. Sprawdź libGL,

$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

2. Utwórz łącze symboliczne, w którym jest zainstalowany zestaw SDK

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so
prayagupd
źródło
Mogę potwierdzić, że rozwiązuje to problem w systemie Ubuntu 64bit.
Yermo Lamers
2

Aby to działało na Ubuntu 12.10 64-bitowym (Quantal Quetzal), musisz zrobić dwie rzeczy:

1) Musisz zainicjalizować LD_LIBRARY_PATH

Przykład:

export LD_LIBRARY_PATH=~/tests/android/adt-bundle-linux-x86_64/sdk/tools/lib

Komentarze: zmień ścieżkę do swojej lokalizacji

2) Musisz utworzyć dowiązanie symboliczne

a) Użyj, locate libGLaby znaleźć właściwą bibliotekę:

rudy@vsolutions:~$ locate libGL
/home/rudy/opt/android/android-sdk-linux/tools/lib/libGLES_CM_translator.so
/home/rudy/opt/android/android-sdk-linux/tools/lib/libGLES_V2_translator.so
/usr/lib/i386-linux-gnu/libGLU.so.1
/usr/lib/i386-linux-gnu/libGLU.so.1.3.1
...
/usr/lib32/nvidia-current/libGL.so.304.43

b) Utwórz łącze miękkie

sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so

Komentarze: używaj biblioteki 64-bitowej w 64-bitowym systemie operacyjnym!

Teraz uruchom emulator. Mój system to Optimus i zainstalowałem Bumblebee . Mogę używać „Intel Open Source Technology Center” „Mesa DRI Intel (R) Ironlake Mobile” „2.1 Mesa 9.0” lub „NVIDIA Corporation” „GeForce GT 330M / PCIe / SSE2” „3.3.0 NVIDIA 304.43”.

a) Intel

/home/rudy/tests/android/adt-bundle-linux-x86_64/sdk//tools/emulator64-arm -avd avd_42 -scale 0.46 -gpu on -verbose

b) Nvidia

optirun /home/rudy/tests/android/adt-bundle-linux-x86_64/sdk//tools/emulator64-arm -avd avd_42 -scale 0.46 -gpu on -verbose

Uwagi:

  • Nie widziałem żadnej różnicy między kartami Intela i Nvidii ... Na pewno dlatego, że emulator to nie GPU obciąża .
  • W moim systemie Intel Core i5 uruchomienie emulatora zajęło prawie 1 minutę ... Prosimy o cierpliwość ... Po załadowaniu emulator wydaje mi się dość szybki (1 minuta oczekiwania). Jeśli uruchomisz emulator z Eclipse IDE , emulator wykonuje emulację programową (GPU jest wyłączony) i uruchomienie trwało 1 min 30 ... Jest znacznie wolniej niż przy użyciu kart Intel lub Nvidia !!!
  • verbose jest parametrem używanym do wyświetlania dalszych informacji diagnostycznych
  • optirunto polecenie wykorzystania Nvidii na Bumblebee. Jeśli nie masz Bumblebee, nie używaj go!
  • avd to urządzenie wirtualne
  • gpu on skorzystać z karty graficznej
Rudy Vissers
źródło
1

OSError: libGL.so: nie można otworzyć pliku obiektu współdzielonego: nie ma takiego pliku lub katalogu

Może pojawić się w systemach Linux podczas pierwszej próby uruchomienia VNL. Aby go rozwiązać, utwórz (jako administrator) nowy link w /usr/lib:

sudo ln -s /usr/lib/libGL.so.1.2 /usr/lib/libGL.so

Jeśli masz 64-bitowy system Linux, użyj /usr/lib64 instead.

Najpierw sprawdź, czy faktycznie masz libGL.so.1.2w /usr/liblub /usr/lib64; libGL.so.1zamiast tego może być nazwany lub inny, lub znajdować się w innym katalogu, w zależności od sterowników wideo.

Możesz użyć locate, libGLaby znaleźć właściwy plik do połączenia.

Dipali
źródło
1

Miałem ten sam problem. Ale w moim przypadku rozwiązałem to w inny (myślę, że lepszy) sposób.

W mojej sytuacji (Lubuntu 13.10) wystarczyło po prostu zainstalować również bibliotekę libgl1-mesa-devpoprzez menedżera pakietów Synaptic ( libgl1-mesa-dribiblioteka była już domyślnie zainstalowana podczas konfigurowania dystrybucji Lubuntuu).

To rozwiązuje wszystkie kłopoty związane z umieszczaniem łączy z jednego pliku do drugiego, a także zapobiega zanieczyszczeniu systemu:

  • Skąd będziesz wiedzieć po kilku miesiącach (lub latach), jakie dedykowane linki umieściłeś, aby system działał?
  • A co z przyszłymi aktualizacjami, jeśli zaczniesz robić te rzeczy samodzielnie? Czy coś zostanie uszkodzone / nie zostanie zaktualizowane z powodu „ręcznej interwencji”?

Jeśli używasz „mechanizmu systemowego”, wszystko jest zrobione za Ciebie. I poprawnie zrobione. Właśnie dlatego te narzędzia są na pierwszym miejscu.

Najlepsze rgds,

GeertVc
źródło
Właśnie teraz zobaczyłem, że @Tanyasipeti zrobił to samo dzięki apt-get. Ale w moim przypadku całkowicie rozwiązało to problem. Uruchomiłem emulator.
GeertVc
Po prostu wymyśliłem to dla 13.10 i chciałem dodać coś podobnego jako odpowiedź!
Veger
1

Podobnie jak w przypadku user1289608, udało mi się utworzyć łącze sym z istniejącej instalacji Mesy:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
kcstrom
źródło
0

Używam Ubuntu 12.04 w wersji 64-bitowej. Łączenie /usr/lib64/libGLC.so.0z/usr/lib64/libGL.soWydaje że witryny rozwiązuje problem.

EDYCJA: Zatrzymuje komunikaty o błędach, ale emulator nadal działa wolno.

glen3b
źródło
Tak, dla mnie emulator też jest niesamowicie wolny.
Igor Ganapolsky,
0

To zadziałało dla mnie:

Zrestartuj adb z DDMS:
In Eclipse: Window> Open Perspective ...> Other> DDMS. Wybierz emulator z lewego panelu bocznego i wybierz „Uruchom ponownie adb”

Możesz również ponownie uruchomić serwer adb z okna terminala.

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server
anirus
źródło
0

Znalazłem folder libGL za pomocą polecenia „zlokalizuj”

Okazało się, że znajduje się w / usr / lib / i386-linux-gnu /

~ $ locate libGL
/usr/lib/i386-linux-gnu/libGLEW.so.1.8
/usr/lib/i386-linux-gnu/libGLEW.so.1.8.0
/ usr / lib / i386-linux-gnu / libGLEWmx .so.1.8
/usr/lib/i386-linux-gnu/libGLEWmx.so.1.8.0
/usr/lib/i386-linux-gnu/libGLU.so.1
/ usr / lib / i386-linux-gnu / libGLU .so.1.3.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0

cootje
źródło
0

Podczas instalacji Debiana 7 w wersji Wheezy użyłem następującego polecenia:

ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 opt/android/tools/lib/libGL.so
Sileria
źródło
0
sudo apt-get install libgl1-mesa-dev
cd ~/Development/adt-bundle-linux-x86_64-20140321/sdk/tools/lib
unlink libGL.so 
ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 libGL.so

Otóż ​​to!

user1090003
źródło
0

Miałem ten problem, ponieważ podczas tworzenia AVD zaznaczyłem „Użyj GPU hosta”. Wypróbowałem to z niezaznaczoną opcją i udało mi się pomyślnie uruchomić emulator. Jest to dopuszczalne dla moich celów testowych, ale jeśli użycie hosta GPU jest ważne, prawdopodobnie będziesz chciał wypróbować inne rozwiązania tutaj.

Ben Jakuben
źródło
-1

Rozwiązałem ten problem, ponownie instalując libgl1, zarówno biblioteki 64-, jak i 32-bitowe:

$ sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-glx:i386

Tło: Wcześniej przerzuciłem się z darmowego sterownika Radeon z powrotem na fglrx. Wydaje mi się, że to w jakiś sposób zepsuło moje libgl1, ponieważ fglrx ma swoją własną wersję.

Poza tym myślę, że inne przedstawione tutaj rozwiązania są prawdopodobnie niebezpieczne, ponieważ błędne jest dowiązanie symboliczne 32-bitowych bibliotek współdzielonych do katalogu (64-bitowego) / lib /.

dmoebius
źródło
-2

Sprawdź, czy masz libgl1-mesa-*zainstalowane pakiety. Jeśli tak, zainstalujlibgl1-mesa-dev pakiet, aby uzyskać niewersjonowane obiekty udostępnione.

Nie powinieneś tego robić - to błąd zespołu Androida. Daj im spokój, są tylko programistami Java.

Ryan
źródło
mam już mesa-libGL-dev w swoim systemie, ale nadal mam błąd
php.khan.
To zadziałało dla mnie na 32-bitowym Ubuntu 11.10. Zainstalowałem libgl1-mesa-dev i nie było już komunikatu o błędzie podczas uruchamiania emultora. Nie musiałem wykonywać żadnego linkowania, ale może byłoby to wymagane na 64-bitowym?
Katherine Rix