Fehler beim Laden von libGL.so auf Android

82

Ich verwende Ubuntu 12.04 (Precise Pangolin) mit dem Oracle JDK 7 und wenn ich den Android-Emulator von Eclipse aus starte , wird folgender Fehler angezeigt:

[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

Auch der Emulator ist sehr langsam. Wie kann ich dieses Problem lösen?

php.khan
quelle

Antworten:

82

Ich habe das Android SDK in ~ / android-sdk-linux_x86 installiert, also habe ich:

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

Dies löst Fehler wie das Verknüpfen mit / usr / lib, erfordert jedoch kein Root-Verzeichnis und führt nicht zu Problemen mit den Verzeichnissen des Kernsystems.

user1410657
quelle
5
Dies ist in Kombination mit dem Befehl "apt-get" von libo die sauberste Lösung.
Dave Cameron
Wenn Sie libGL.so.1 noch nicht haben, müssen Sie möglicherweise die Lösung von libo verwenden, aber dies ist der sauberste Ort, um die Datei zu verknüpfen. Keine Notwendigkeit, 32 Bit in 64-Bit-Bibliotheken zu setzen ....
Ajax
23
locate libGLzuerst kann helfen
Yuan
2
Ich habe find / -name 'libGL.so.1'und es in sich /usr/lib/x86_64-linux-gnuauf debian jessie.
Justin Skiles
35

Gehen Sie unter 64-Bit-Ubuntu 12.04 folgendermaßen vor:

$ 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

Quelle: Installation der erforderlichen Pakete (Ubuntu 12.04)

libo
quelle
2
das hat mein System
Alexandros
Diese Antwort in Kombination mit der Antwort - askubuntu.com/a/144194 zum Lösen von Abhängigkeiten (verwenden Sie aptitude, um die Abhängigkeit zu lokalisieren und zu sehen, was das Problem verursacht) und zum Ausführen eines Befehls, sudo apt-get install --reinstall gcc-4.7-multilibwie ich ihn unter answer askubuntu.com/a/236114
Aleks
Ich musste zuerst "sudo apt-get install libglapi-mesa" und dann "sudo apt-get install libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386" zuerst
ausführen
Ich glaube, ich musste libGL nicht für x86 installieren, es war genug, um ./sdk/tools/emulator64-x86 zu verwenden? (Beachten Sie die '64')
jcarballo
1
Oh man, es ist nicht gut, riesige Zeilen mit App-Raten ohne jegliche Erklärung oder Warnung zu veröffentlichen.
Sebastian Mach
32

Ich benutze Ubuntu 12.04 64-Bit. Verwenden Sie den folgenden Befehl, um das Problem zu lösen

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

Hinweis : Dies gilt nur für diejenigen, die die AMD / ATI-Grafiktreiber verwenden.

user1289608
quelle
1
Das hat auch bei mir funktioniert, ich denke, das funktioniert nur bei ATI-Karten. Dies ist technisch falsch, da es eine gemeinsam genutzte 32-Bit-Bibliothek mit dem Verzeichnis (64 Bit) / lib / verknüpft, aber es sieht so aus, als würde der Android-Emulator dort nur nach dieser Bibliothek suchen.
Alex Pretzlav
3
Ich würde empfehlen, eine Dateisuche nach libGL.so durchzuführen und den Link-Befehl basierend auf dem Speicherort anzupassen. Meins war zufällig unter: / usr / lib / i386-linux-gnu / mesa
bytebender
2
Meins war unter /usr/lib/x86_64-linux-gnu/mesa/libGL.so, aber es verursachte einen Fehler, wenn ich versuchte auszuführen, weil es eine 32-Bit-Bibliothek wollte und ich eine 64-Bit-Bibliothek lieferte
Ben McCann
32

Für 32-Bit-Ubuntu 12.04 LTS funktionierte dies:

sudo apt-get install libgl1-mesa-dev

Keine der folgenden Funktionen hat funktioniert:

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
Holzdrache
quelle
1
das gleiche gilt für 12.10
logcat
Gleiches hier für Linux Mint
Sephy
Funktioniert mit 13.04. Beachten Sie, dass Sie einen Symlink, wenn Sie ihn in das Verzeichnis tools / lib einfügen, erneut entfernen müssen.
Perseiden
2
Der Befehl apt-get funktionierte auch unter Ubuntu 13.04 x64, ohne dass ein Symlink erforderlich war.
Jason McVetta
14

Was für mich funktioniert (Ubuntu 12.04 64bit) war nur zu laufen:

    sudo apt-get install libgl1-mesa-dev

Ich habe festgestellt, dass libGL.soim Verzeichnis existiert/usr/lib/x86_64-linux-gnu/

Die Installation der 32-Bit-Version funktionierte nicht.

Frank AFRIAT
quelle
6

Unter 64-Bit-Ubuntu 12.04 gibt es kein / usr / lib64. Es ist nur / usr / lib. Außerdem ist libGL.so auf meinem Computer nicht vorhanden. Stattdessen lautet die Datei libGLEW.so

Um /usr/lib/LibGL.so zu installieren, können Sie Folgendes ausführen: sudo apt-get install libgl1-mesa-dev

Es hat das Problem jedoch nicht für mich gelöst. In der Tat hat es wahrscheinlich mein System vermasselt.

inder
quelle
Mit Synaptic überprüft, installiert libgl1-mesa-dev libGL.so unter /usr/lib/x86_64-linux-gnu/libGL.so
sergio91pt
1
GLEW ist eine andere Bibliothek, der OpenGL Extension Wrangler . Es ist kein "stattdessen", sondern etwas, das Programme zusätzlich zu libGL verwenden können.
Wyzard
4

Dies funktionierte für mich unter 64-Bit-Ubuntu 12.10 und dem ADT-Bundle:

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

Wenn Sie nicht /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1nur installieren müssenlibgl1-mesa-glx

sudo apt-get install libgl1-mesa-glx
marcantonio
quelle
4

Ich glaube, ich habe es richtig verstanden, keine Warnungen und keine Langsamkeit ... Dies funktioniert jedoch möglicherweise nicht mit proprietären Treibern.

Stellen Sie sicher, dass libgl1-mesa-glx: i386 installiert ist (auch wenn Sie eine x64-SO-Datei haben). Dann mach:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
sergio91pt
quelle
3

NVidia Optimus:

Ich habe auf zwei Grafiken (Intel und NVIDIA) Folgendes verwendet:

  1. Installieren Sie Bumblebee (siehe: https://wiki.ubuntu.com/Bumblebee#Installation )
  2. Installieren Sie die erforderliche Bibliothek.
  3. Führen Sie den Emulator auf der diskreten nvidia-Karte aus.

Dies sollte den Trick tun:

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

Wenn Sie den Emulator ausführen möchten, verwenden Sie einfach optirun:

optirun emulator @<avd_name>

Ich sollte eine Warnung geben, dass ich erst gestern Linux installiert habe. Also weiß ich nicht wirklich was ich tue ...

user1860888
quelle
3

Unter Bezugnahme auf http://developer.android.com/sdk/installing/index.html habe ich ia32-libs installiert und Folgendes ausgeführt:

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

Das ist alles, was ich getan habe, um dieses Problem zu lösen.

Gridstation
quelle
Schön, aber ich musste /usr/lib/x86_64-linux-gnu/mesastattdessen verwenden
Joril
3

Ich benutze Linux Mint 14 - 64 Bit und für mich hat es funktioniert :):

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev
jAbreu
quelle
2

Unter Ubuntu 12.04 64-Bit, GNOME 3.4, habe ich zuerst auf http://developer.android.com/sdk/installing/index.html verwiesen und ia32-lib installiert, wodurch / usr / lib / i386-linux-gnu generiert wird /mesa/libGL.so.1.2.0

Dann führe ich den folgenden Befehl aus und habe dieses Problem gelöst:

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

Dies unterscheidet sich geringfügig von der Antwort der Gridstation.

Ich denke, es ist nicht erforderlich, den Mesa-Treiber lokal zu installieren, was zu Problemen mit Ihren echten Grafiktreibern führen kann.

Kevin Zhu
quelle
2

Unter Ubuntu 64 Bit

1. Überprüfen Sie 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. Erstellen Sie einen Symlink, auf dem das SDK installiert ist

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so
betenagupd
quelle
Ich kann bestätigen, dass dies das Problem unter Ubuntu 64bit behebt.
Yermo Lamers
2

Damit es auf einem Ubuntu 12.10 (Quantal Quetzal) 64-Bit funktioniert, müssen Sie zwei Dinge tun:

1) Sie müssen LD_LIBRARY_PATH initialisieren.

Beispiel:

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

Kommentare: Ändern Sie den Pfad zu Ihrem Standort

2) Sie müssen eine symbolische Verknüpfung erstellen

a) Verwenden Sie locate libGL, um die richtige Bibliothek zu finden:

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) Erstellen Sie den Softlink

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

Kommentare: Verwenden Sie eine 64-Bit-Bibliothek unter einem 64-Bit-Betriebssystem!

Starten Sie jetzt den Emulator. Mein System ist Optimus und ich habe Bumblebee installiert . Ich kann "Intel Open Source Technology Center", "Mesa DRI Intel (R) Ironlake Mobile", "2.1 Mesa 9.0" oder "NVIDIA Corporation", "GeForce GT 330M / PCIe / SSE2", "3.3.0 NVIDIA 304.43" verwenden.

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

Bemerkungen:

  • Ich habe keinen Unterschied zwischen der Intel- und der Nvidia-Karte gesehen ... Das liegt sicherlich daran, dass der Emulator nicht GPU- intensiv ist.
  • Auf meinem Intel Core i5-System dauerte das Starten des Emulators fast 1 Minute ... Bitte haben Sie etwas Geduld ... Ich finde den Emulator nach dem Laden ziemlich schnell (1 Minute Wartezeit). Wenn Sie den Emulator über die Eclipse- IDE starten , führt der Emulator eine Software-Emulation durch (die GPU ist ausgeschaltet) und der Start dauerte 1 Minute 30 ... Der Start ist viel langsamer als bei Verwendung der Intel- oder Nvidia-Karten !!!
  • verbose ist der Parameter, mit dem weitere Diagnosen angezeigt werden
  • optirunist der Befehl, die Nvidia on Bumblebee zu nutzen. Wenn Sie keine Hummel haben, benutzen Sie sie nicht!
  • avd ist ein virtuelles Gerät
  • gpu on um die Grafikkarte zu nutzen
Rudy Vissers
quelle
1

OSError: libGL.so: Freigegebene Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis

Es kann auf Linux-Systemen angezeigt werden, wenn Sie versuchen, VNL zum ersten Mal zu starten. Um es zu lösen, erstellen Sie (als Administrator) einen neuen Link in /usr/lib:

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

Wenn Sie ein 64-Bit-Linux haben, verwenden Sie /usr/lib64 instead.

Überprüfen Sie zuerst, ob Sie tatsächlich libGL.so.1.2in /usr/liboder haben /usr/lib64; libGL.so.1Abhängig von den Grafiktreibern kann es stattdessen aufgerufen werden oder sich in einem anderen Verzeichnis befinden.

Sie können libGLfind verwenden, um die richtige Datei zu finden, zu der ein Link erstellt werden soll.

Dipali
quelle
1

Ich hatte das gleiche Problem. Aber in meinem Fall habe ich es auf eine andere (ich denke, bessere) Weise gelöst.

In meiner Situation (Lubuntu 13.10) war es ausreichend, die Bibliothek einfach auch libgl1-mesa-devüber den Synaptic Package Manager zu libgl1-mesa-driinstallieren (die Bibliothek wurde bereits standardmäßig installiert, als die Lubuntuu-Distribution eingerichtet wurde).

Das löst den Aufwand, Links von einer Datei zur anderen zu setzen, und verhindert auch die Verschmutzung Ihres Systems:

  • Woher wissen Sie nach einigen Monaten (oder Jahren), welche dedizierten Links Sie gesetzt haben, um das System am Laufen zu halten?
  • Was ist mit zukünftigen Updates, wenn Sie anfangen, diese Dinge selbst zu tun? Wird etwas aufgrund eines "manuellen Eingriffs" kaputt gehen / nicht aktualisiert?

Wenn Sie den "Systemmechanismus" verwenden, ist alles für Sie erledigt. Und richtig gemacht. Deshalb gibt es diese Tools überhaupt erst.

Beste rgds,

GeertVc
quelle
Ich habe gerade gesehen, dass @Tanyasipeti dasselbe durch apt-get getan hat. Aber in meinem Fall hat es das Problem vollständig gelöst. Ich habe den Emulator zum Laufen gebracht.
GeertVc
Ich habe es gerade selbst für 13.10 herausgefunden und wollte etwas Ähnliches als Antwort hinzufügen!
Veger
1

Ähnlich wie bei user1289608 konnte ich einen Sym-Link aus einer vorhandenen Installation von Mesa erstellen:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
kcstrom
quelle
0

Ich benutze Ubuntu 12.04 64-Bit. Das Verknüpfen /usr/lib64/libGLC.so.0mit /usr/lib64/libGL.soscheint das Problem zu lösen.

EDIT: Es stoppt die Fehlermeldungen, aber der Emulator ist für mich immer noch langsam.

glen3b
quelle
Ja, der Emulator ist auch für mich unglaublich langsam.
IgorGanapolsky
0

Das hat bei mir funktioniert:

Starten Sie die ADB vom DDMS aus neu:
In Eclipse: Fenster> Perspektive öffnen ...> Andere> DDMS. Wählen Sie den Emulator im linken Bereich aus und wählen Sie "adb neu starten".

Sie können den ADB-Server auch über das Terminalfenster neu starten.

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server
Anirus
quelle
0

Ich habe den Ordner für libGL mit dem Befehl "find" gefunden.

Es stellte sich heraus, dass es sich in / usr / lib / i386-linux-gnu / befand.

~ $ find 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
quelle
0

Für meine Debian 7 'Wheezy'-Installation habe ich den folgenden Befehl verwendet:

ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 opt/android/tools/lib/libGL.so
Sileria
quelle
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

das ist es!

user1090003
quelle
0

Ich hatte dieses Problem, weil ich beim Erstellen meiner AVD "Host-GPU verwenden" aktiviert hatte. Ich habe es mit dieser Option deaktiviert und konnte den Emulator erfolgreich starten. Dies ist für meine Testzwecke akzeptabel, aber wenn die Verwendung der Host-GPU wichtig ist, möchten Sie wahrscheinlich einige der anderen Lösungen hier ausprobieren.

Ben Jakuben
quelle
-1

Ich habe dieses Problem gelöst, indem ich libgl1 neu installiert habe, sowohl die 64- als auch die 32-Bit-Bibliothek:

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

Hintergrund: Zuvor habe ich vom kostenlosen Radeon-Treiber zurück zu fglrx gewechselt. Ich denke, das hat meine libgl1 irgendwie durcheinander gebracht, weil fglrx mit einer eigenen Version geliefert wird.

Außerdem denke ich, dass die anderen hier bereitgestellten Lösungen möglicherweise gefährlich sind, da es falsch ist, gemeinsam genutzte 32-Bit-Bibliotheken in das Verzeichnis (64 Bit) / lib / zu verknüpfen.

dmoebius
quelle
-2

Überprüfen Sie, ob Sie libgl1-mesa-*Pakete installiert haben. Wenn ja, installieren Sie das libgl1-mesa-devPaket, um die nicht versionierten freigegebenen Objekte abzurufen.

Sie sollten dies nicht tun müssen - es ist der Fehler des Android-Teams. Geben Sie ihnen eine Pause, sie sind nur Java-Entwickler.

Ryan
quelle
Ich habe bereits mesa-libGL-dev in meinem System, aber immer noch den Fehler
php.khan
Dies funktionierte für mich unter Ubuntu 11.10 32-Bit. Ich habe libgl1-mesa-dev installiert und beim Starten des Emultors wurde keine Fehlermeldung mehr angezeigt. Ich musste keine Verknüpfung durchführen, aber möglicherweise wäre dies für 64-Bit erforderlich?
Katherine Rix