Emulator kann unter Linux nicht gestartet werden (Ubuntu 15.10)

103

Ich versuche, den Emulator zu starten, aber er wird im Protokoll ausgegeben:

libGL error: unable to load driver: r600_dri.so 
libGL error: driver pointer missing 
libGL error: failed to load driver: r600 
libGL error: unable to load driver: swrast_dri.so 
libGL error: failed to load driver: swrast 
X Error of failed request:  GLXBadContext   
Major opcode of failed request:  155 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request:  47
Current serial number in output stream:  46 
libGL error: unable to load driver: r600_dri.so 
libGL error: driver pointer missing 
libGL error: failed to load driver: r600 
libGL error: unable to load driver: swrast_dri.so 
libGL error: failed to load driver: swrast 
X Error of failed request:  GLXBadContext
Major opcode of failed request:  155 (GLX)
Minor opcode of failed request:  6 (X_GLXIsDirect)   
Serial number of failed request:  47   
Current serial number in output stream:  46 
libGL error: unable to load driver: r600_dri.so 
libGL error: driver pointer missing 
libGL error: failed to load driver: r600
libGL error: unable to load driver: swrast_dri.so 
libGL error: failed to load driver: swrast 
X Error of failed request:  BadValue (integer parameter out of range for operation)   
Major opcode of failed request:  155 (GLX)   
Minor opcode of failed request:  24 (X_GLXCreateNewContext)   
Value in failed request:  0x0   
Serial number of failed request:  33   
Current serial number in output stream:  34 
QObject::~QObject: Timers cannot be stopped from another thread emulator: WARNING: Increasing RAM size to 1GB

Wie man es repariert? Ich lese Themen mit ähnlichen Fehlern, aber es hilft mir nicht.

Шах
quelle
Hier finden Sie eine bequeme Lösung ohne die in dieser Antwort angegebenen
Extralinen

Antworten:

79

Schau es dir an

https://code.google.com/p/android/issues/detail?id=197254

insbesondere die Punkte 3 und 19. Dies ist eher eine Problemumgehung als eine echte Lösung, aber es hat mich wieder in Bewegung gebracht. Sie müssen den Befehl anpassen für:

  • den Speicherort der libstdc++.so.6Datei auf Ihrem System - das habe ich locate libstdc++.so.6immer gefunden
  • Der Pfad zur ausführbaren Emulatordatei
  • der Name Ihres Emulators

so war mein Befehl

LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -netdelay none -netspeed full -avd Nexus_5_API_21

Dadurch wird der Emulator gestartet und Sie können ihn im Dialogfeld "Geräteauswahl" auswählen, wenn Sie Ihre App ausführen.

Kennzeichen
quelle
Danke dir! Aber in meinem Fall sieht das Betriebssystem kein fglrx-Paket, obwohl ich es installiert habe und es funktioniert hat. Aber nach Systemupdates habe ich diesen Fehler bekommen. Ich habe dieses Paket neu installiert und es hat wieder funktioniert :) Entschuldigung für Englisch.
Шах
Das in Beitrag Nr. 23 des Links beschriebene Update ermöglichte es meinem Emulator, unter Ubuntu 16.04 zu starten, aber der Emulatorbildschirm wird nur schwarz angezeigt.
dazza5000
5
Ich habe das Problem auf hässliche Weise gelöst: cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $ANDROID_HOME/tools/lib/libstdc++/libstdc++.so.6
Yu Jiaao
Falls es hilfreich ist, können Sie den Namen des Emulators finden mit:LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -list-avds
DaveyDaveDave
170

Die Verwendung von libstdc ++. So.6, das in Ihrem System anstelle des mit dem Android SDK gelieferten verfügbar ist, löst dieses Problem.

  • Der Emulator hat dazu einen Schalter -use-system-libs.

    ~/Android/Sdk/tools/emulator -avd Nexus_5_API_23 -use-system-libs

  • Alternativ können Sie die ANDROID_EMULATOR_USE_SYSTEM_LIBSUmgebungsvariable 1für Ihren Benutzer / Ihr System festlegen . Dies hat den Vorteil, dass der Emulator auch dann funktioniert, wenn Sie ihn in Android Studio gestartet haben.

Weitere Details: https://code.google.com/p/android/issues/detail?id=197254#c15

Ausnahme_notiert
quelle
Danach wird in Ihrem Android Studio ein verbundenes Gerät (in diesem Fall Nexus_5_API_23) angezeigt, wenn Sie versuchen, Ihre App auszuführen.
Alejo Bernardin
3
Dies ist die beste Antwort imo, da der Emulator ordnungsgemäß über ein Shell-Skript gestartet werden kann, ohne dass die vorhandenen SDK-Bibliotheken verschoben oder verknüpft werden müssen.
Potaito
19
auf Ubuntu 16.10 export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1muss hinzugefügt werden$HOME/.profile
Greg Dan
unbekannte Option: -use-system-libs :(
Jaroslav Záruba
1
@ GregDan: oder zu/etc/environment
serv-inc
123
$ cd Android/Sdk/emulator/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6

es hat bei mir funktioniert

Mortada Jafar
quelle
1
Es sieht so aus, als müsste ich libstdc ++ installieren und erst danach konnte ich den Simulator ausführen. Danke für Ihre Hilfe!
Pini Cheyni
6
meine libstdc ++. so.6 befindet sich unter /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Joshua
2
@ Joshua - Richtig. Für Ubuntu 17.10+ benötigen Sie Folgendes für den letzten Schritt $ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Timothy C. Quinn
Hat für mich gearbeitet. Ich würde gerne wissen, was es kaputt gemacht hat.
Toby Wilson
Diese Lösung funktioniert bei mir. Der Emulator ist nach dem Update von Ubuntu 16.04 auf 18.04 kaputt gegangen. Vielen Dank!
RuX
52

Ich habe einen ähnlichen Fehler in Ubuntu 16.04 64-Bit. Für mich funktioniert die Antwort Nr. 23 hervorragend https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter % 20Öffnet & groupby = & sort = & id = 197254

$ cd $ANDROID_HOME/android-sdk-linux_x86/tools/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6 $ANDROID_HOME/android-sdk-linux_x86/tools/lib64/libstdc++
luizMello
quelle
Das hat bei mir funktioniert. Möglicherweise müssen Sie jedoch in verschiedenen Verzeichnissen nach Ihrem Android SDK suchen. Meins wurde gefunden bei/home/daniel/Android/Sdk/tools/lib64/libstdc++
Daniel Levin
Ja, der Abschnittspfad vor "/ tools" kann abhängig von den Benutzernamen und dem Sdk-Installationsordner variieren.
LuizMello
3
Bestätigen Sie die Arbeit, in Ubuntu Xenial ist der Pfad /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Arisalexis
danke .... das war auch die Lösung in Ubuntu 16.10, der gleiche Pfad wie im obigen Kommentar ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ~ / Android / Sdk / tools / lib64 / libstdc ++
Juan
29

Verwenden Sie "Software" in der Option "Emulierte Leistungsgrafiken" in den AVD-Einstellungen. Sehr einfache Lösung.

Saintjab
quelle
Es ist ein einfacher , aber es ist sehr langsam :)
Шах
Arbeiten Sie an Ubuntu 16 64bit, wählen Sie einfach Dropdown :) 10x
Vasil Valchev
Das war die einzige Lösung , die für mich (Ubuntu 16.04LTS) gearbeitet
Feu
20

Ich mache das und es funktioniert

cd ~/Android/Sdk/emulator/lib64/libstdc++ 
mv libstdc++.so.6 libstdc++.so.6.bak
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
Tetar
quelle
Ich hatte diesen Fehler aufgrund meines Videotreibers, habe ihn später neu installiert und alles begann zu funktionieren. Ich habe diesen Fehler bereits vergessen, es ist sehr seltsam, dass jemand immer noch Probleme hat, weil er viele Lösungen sucht, einschließlich dieses Themas.
Шах
Ich habe gerade diesen Fehler vor 10 Minuten :)
Tetar
10

Suchen Sie besser die Standardeinstellung libstdc ++. so.6 Ihres Systems mit dem Befehl find libstdc ++. so.6

Und dann sichern Sie die Android SDK-Version der Datei in ~ / Android / Sdk / tools / lib64 / libstdc ++ /

Erstellen Sie einen Softlink für libstdc ++. So.6 mit demselben Namen im obigen Pfad und ersetzen Sie den vorhandenen Link, der auf die Standarddatei im System verweist

Auf diese Weise müssen wir den Emulator nicht jedes Mal über die Befehlszeile neu starten.

BuzzR
quelle
9

Versuchen Sie, die Grafikoption in den Emulatoreinstellungen zu ändern: Geben Sie hier die Bildbeschreibung ein

Mohsen Kashi
quelle
0

Ich hatte auch viele Probleme, AVD auf meinem Computer zu starten. Probleme mit der Verwendung von Systembibliotheken, dem Erstellen von Symlinks zu lokalen Bibliotheken usw.

Was für mich wirklich funktioniert hat, war die Installation der NVIDIA-Treiber mit

sudo apt install nvidia-340

Meine Distribution (Hinweis, ich verwende kein Ubuntu 15.10):

$ uname -a
Linux ruapehu 4.4.0-38-generic #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/issue
Ubuntu 16.04.1 LTS \n \l

Stellen Sie sicher, dass Sie das für Sie geeignete NVIDIA-Paket überprüfen, da Ubuntu verschiedene Geschmacksrichtungen bietet. Zum Beispiel:

$ sudo apt list "nvidia-[0-9][0-9][0-9]" 
Listing... Done
nvidia-304/xenial 304.131-0ubuntu3 amd64
nvidia-331/xenial 340.96-0ubuntu3 amd64
nvidia-340/xenial,now 340.96-0ubuntu3 amd64 [installed]
nvidia-346/xenial 352.63-0ubuntu3 amd64
nvidia-352/xenial 361.42-0ubuntu2 amd64
nvidia-361/xenial,now 361.42-0ubuntu2 amd64

Ich habe die Liste in einer Bottom-up-Strategie getestet, von 361 bis ich eine gefunden habe, die funktioniert (in meinem Fall 340).

Hoffentlich hilft das.

Alexandre Schmidt
quelle
0

In meinem Fall (Ubuntu 16.10 64-Bit, Android Studio 2.3) befanden sich die Bibliotheken an einem anderen Ort. Befehle sind also:

/home/myusername/Android/Sdk/emulator/lib64/libstdc++

➜  libstdc++ ll
total 9,3M
-rwxr-xr-x 1 myusername myusername 4,6M мар 21 00:09 libstdc++.so.6
-rwxr-xr-x 1 myusername myusername 4,6M мар 21 00:09 libstdc++.so.6.0.18

➜  libstdc++ mv libstdc++.so.6 libstdc++.so.6.bak
➜  libstdc++ mv libstdc++.so.6.0.18 libstdc++.so.6.0.18.bak
➜  libstdc++ ln -s /usr/lib32/libstdc++.so.6 /home/myusername/Android/Sdk/emulator/lib64/libstdc++ 
➜  libstdc++ ln -s /usr/lib32/libstdc++.so.6.0.22 /home/myusername/Android/Sdk/emulator/lib64/libstdc++ 

➜  libstdc++ ll
total 9,3M
lrwxrwxrwx 1 myusername myusername   25 мар 29 13:18 libstdc++.so.6 -> /usr/lib32/libstdc++.so.6
-rwxr-xr-x 1 myusername myusername 4,6M мар 21 00:09 libstdc++.so.6.0.18.bak
lrwxrwxrwx 1 myusername myusername   30 мар 29 13:19 libstdc++.so.6.0.22 -> /usr/lib32/libstdc++.so.6.0.22
-rwxr-xr-x 1 myusername myusername 4,6M мар 21 00:09 libstdc++.so.6.bak

Und jetzt wird der Emulator normalerweise über den AVD-Manager gestartet.

Porfirion
quelle
0

Ich hatte ähnliche Probleme mit der Verwendung i965_dri.sound swrast_dri.sokonnte nicht auf Softwaregrafiken in der GUI umsteigen.

Also ging ich zum Ordner des Emulators ( Show on DiskLink in AVDM) und fand denconfig.ini

Hier habe ich gerade die folgende Zeile geändert, um die Verwendung der GPU zu verhindern:

hw.gpu.enabled=no
jkbadsberg
quelle
-1

$ cd ~ / Android / Sdk / emulator / lib64 / libstdc ++ $ mv libstdc ++. so.6 libstdc ++. so.6.bak $ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc ++. so .6

Rahul Bhardwaj
quelle