Impossibile avviare l'emulatore su Linux (Ubuntu 15.10)


103

Provo ad avviare l'emulatore ma esce nel registro:

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

Come sistemarlo? Ho letto argomenti con errori simili ma non mi aiuta.


trova qui una comoda soluzione senza le extraline fornite in questa risposta: [ github.com/rimian/cordova-ember-android]
refle

Risposte:


79

Date un'occhiata al

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

in particolare gli articoli # 3 e # 19. Questa è una soluzione alternativa piuttosto che una vera soluzione, ma mi ha fatto muovere di nuovo. Dovrai modificare il comando per:

  • la posizione del libstdc++.so.6file sul tuo sistema: ero solito locate libstdc++.so.6trovarlo
  • il percorso dell'eseguibile dell'emulatore
  • il nome del tuo emulatore

quindi il mio comando era

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

Questo quindi avvia l'emulatore e puoi selezionarlo nella finestra di dialogo "Scelta dispositivo" quando esegui la tua app.


Grazie! Ma nel mio caso il sistema operativo non vede il pacchetto fglrx anche se l'ho installato e ha funzionato. Ma dopo gli aggiornamenti di sistema ho ricevuto questo bug. Ho reinstallato questo pacchetto ed è tornato a funzionare :) Ci scusiamo per l'inglese.
Шах

La correzione delineata nel post # 23 dal collegamento ha permesso al mio emulatore di avviarsi su Ubuntu 16.04, ma lo schermo dell'emulatore viene visualizzato solo in nero.
dazza5000

5
Ho risolto il problema nel modo più brutto: cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $ANDROID_HOME/tools/lib/libstdc++/libstdc++.so.6
Yu Jiaao

Nel caso sia utile, puoi trovare il nome dell'emulatore con:LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -list-avds
DaveyDaveDave

170

L'uso di libstdc ++. So.6 che è disponibile nel tuo sistema invece di quello in bundle con l'SDK Android risolve questo problema.

  • L'emulatore ha un interruttore -use-system-libsper farlo.

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

  • In alternativa è possibile impostare la ANDROID_EMULATOR_USE_SYSTEM_LIBSvariabile d'ambiente su 1per il proprio utente / sistema. Questo ha il vantaggio di assicurarsi che l'emulatore funzioni anche se lo avvii da Android Studio.

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


Dopodiché nel tuo Android Studio apparirà un dispositivo connesso (in questo caso Nexus_5_API_23) quando proverai a eseguire la tua app.
Alejo Bernardin

3
Questa è la migliore risposta imo poiché l'emulatore può essere avviato correttamente tramite uno script di shell senza dover spostare o collegare le librerie sdk esistenti.
Potaito

19
su Ubuntu 16.10 export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1deve essere aggiunto a$HOME/.profile
Greg Dan il

opzione sconosciuta: -use-system-libs :(
Jaroslav Záruba

1
@GregDan: o a/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

ha funzionato per me


1
Sembra che ho dovuto installare libstdc ++ e solo dopo sono stato in grado di eseguire il simulatore, grazie per il tuo aiuto!
Pini Cheyni

6
il mio libstdc ++. so.6 come si trova in /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Joshua

2
@Joshua - Corretto. Per Ubuntu 17.10+, è necessario quanto segue per l'ultimo passaggio $ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Timothy C. Quinn

Ha funzionato per me. Mi piacerebbe sapere cosa l'ha rotto però.
Toby Wilson

Questa soluzione funziona per me. L'emulatore si è rotto dopo l'aggiornamento da Ubuntu 16.04 a 18.04. Grazie!
ruX

52

Ho un errore simile in Ubuntu 16.04 a 64 bit. Per me la soluzione answer # 23 funziona alla grande https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter % 20Opened & 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++

Questo ha funzionato per me. Potrebbe essere necessario cercare in diverse directory per il tuo sdk Android. Il mio è stato trovato a/home/daniel/Android/Sdk/tools/lib64/libstdc++
Daniel Levin,

Sì, il percorso della sezione prima di "/ tools" può variare a seconda dei nomi utente e della cartella di installazione di Sdk.
luizMello

3
conferma il funzionamento, in ubuntu xenial il percorso è /usr/lib/x86_64-linux-gnu/libstdc++.so.6
arisalexis

grazie .... questa era la soluzione anche in Ubuntu 16.10, lo stesso percorso del commento sopra ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ~ / Android / Sdk / tools / lib64 / libstdc ++
Juan

29

Usa "Software" nell'opzione Emulated Performance Graphics, nelle impostazioni AVD. Soluzione molto semplice.


È semplice ma è molto lento :)
Шах

Lavora su Ubuntu 16 64bit, seleziona semplicemente a discesa :) 10x
Vasil Valchev

Questa era l'UNICA soluzione che ha funzionato per me (Ubuntu 16.04LTS)
Feu

20

lo faccio e funziona

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

Ho avuto questo bug a causa del mio driver video, l'ho reinstallato più tardi e tutto ha iniziato a funzionare. Ho già dimenticato questo bug, è molto strano che qualcuno abbia ancora problemi perché cerca molte soluzioni, incluso questo argomento.
Шах

Ho solo questo bug 10 minuti fa :)
tetar

10

individuare meglio il proprio sistema predefinito libstdc ++. so.6 utilizzando il comando locate libstdc ++. so.6

Quindi fai un backup della versione Android sdk del file in ~ / Android / Sdk / tools / lib64 / libstdc ++ /

E crea un collegamento software per libstdc ++. So.6 con lo stesso nome nel percorso sopra che sostituisce quello esistente che punta al file predefinito nel sistema

In questo modo non è necessario riavviare l'emulatore ogni volta dalla riga di comando.


9

Prova a cambiare l'opzione grafica nelle impostazioni dell'emulatore: inserisci qui la descrizione dell'immagine


0

Avevo anche molti problemi ad avviare AVD sulla mia macchina. Lottato con l'utilizzo di librerie di sistema, la creazione di collegamenti simbolici a librerie locali, ecc ...

Ciò che lo ha fatto funzionare davvero per me è stato installare i driver nvidia con

sudo apt install nvidia-340

La mia distribuzione (nota che non sto usando 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

Assicurati di controllare il pacchetto nvidia adatto a te, poiché Ubuntu offre diversi gusti. Per esempio:

$ 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

Ho testato l'elenco in una strategia dal basso verso l'alto, da 361 fino a quando non ne ho trovato uno che funzionasse (340, nel mio caso).

Spero che aiuti.


0

Nel mio caso (Ubuntu 16.10 64-bit, Android Studio 2.3) le librerie si trovavano in un altro posto. Quindi i comandi sono:

/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

E ora l'emulatore viene avviato normalmente dal gestore AVD.


0

Ho avuto problemi simili con l'utilizzo di i965_dri.soeswrast_dri.so non sono stato in grado di passare alla grafica del software nella GUI.

Quindi sono andato alla cartella dell'emulatore ( Show on Diskcollegamento in AVDM) e ho trovato il fileconfig.ini

Qui ho appena cambiato la seguente riga per impedirgli di usare la GPU:

hw.gpu.enabled=no


-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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.