Nie można uruchomić emulatora w systemie Linux (Ubuntu 15.10)

103

Próbuję uruchomić emulator, ale wyświetla w dzienniku:

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

Jak to naprawić? Czytam tematy z podobnymi błędami, ale to mi nie pomaga.

Шах
źródło
znajdź tutaj wygodne rozwiązanie bez extralines podanych w tej odpowiedzi: [ github.com/rimian/cordova-ember-android]
refle

Odpowiedzi:

79

Spojrzeć na

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

w szczególności punkty 3 i 19. Jest to raczej obejście niż prawdziwe rozwiązanie, ale znowu się ruszam. Będziesz musiał dostosować polecenie dla:

  • lokalizacja libstdc++.so.6pliku w twoim systemie - kiedyś locate libstdc++.so.6to znalazłem
  • ścieżka do pliku wykonywalnego emulatora
  • nazwa twojego emulatora

więc mój rozkaz był

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

Spowoduje to uruchomienie emulatora i możesz go wybrać w oknie dialogowym „Device Chooser” po uruchomieniu aplikacji.

znak
źródło
Dziękuję Ci! Ale w moim przypadku system operacyjny nie widzi pakietu fglrx, chociaż go zainstalowałem i zadziałało. Ale po aktualizacjach systemu dostałem ten błąd. Ponownie zainstalowałem ten pakiet i znowu zaczął działać :) Przepraszam za angielski.
Шах
Poprawka opisana w poście # 23 z linku umożliwiła uruchomienie mojego emulatora w systemie Ubuntu 16.04, ale ekran emulatora wyświetla się tylko na czarno.
dazza5000
5
Rozwiązałem problem w brzydki sposób: cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $ANDROID_HOME/tools/lib/libstdc++/libstdc++.so.6
Yu Jiaao
Jeśli jest to pomocne, możesz znaleźć nazwę emulatora z:LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -list-avds
DaveyDaveDave
170

Użycie libstdc ++. So.6, który jest dostępny w twoim systemie zamiast tego dołączonego do zestawu SDK systemu Android, rozwiązuje ten problem.

  • Emulator ma -use-system-libsdo tego przełącznik .

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

  • Alternatywnie możesz ustawić ANDROID_EMULATOR_USE_SYSTEM_LIBSzmienną środowiskową na 1dla swojego użytkownika / systemu. Ma to tę zaletę, że emulator będzie działał, nawet jeśli uruchomisz go z poziomu Android Studio.

Więcej szczegółów: https://code.google.com/p/android/issues/detail?id=197254#c15

wyjątek_notowany
źródło
A potem w Twoim Android Studio pojawi się podłączone urządzenie (w tym przypadku Nexus_5_API_23) podczas próby uruchomienia aplikacji.
Alejo Bernardin
3
Jest to najlepsza odpowiedź na imo, ponieważ emulator można poprawnie uruchomić za pomocą skryptu powłoki bez konieczności przenoszenia lub łączenia istniejących bibliotek sdk.
Potaito
19
na Ubuntu 16.10 export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1należy dodać do$HOME/.profile
Greg Dan
nieznana opcja: -use-system-libs :(
Jaroslav Záruba
1
@GregDan: or to/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

to działa dla mnie

Mortada Jafar
źródło
1
Wygląda na to, że musiałem zainstalować libstdc ++ i dopiero potem udało mi się uruchomić symulator, dzięki za pomoc!
Pini Cheyni
6
my libstdc ++. so.6 z lokalizacji /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Joshua
2
@Joshua - poprawnie. W przypadku Ubuntu 17.10+ do ostatniego kroku potrzebujesz: $ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Timothy C. Quinn
Pracował dla mnie. Chciałbym jednak wiedzieć, co go zepsuło.
Toby Wilson
To rozwiązanie działa u mnie. Emulator zepsuł się po aktualizacji z Ubuntu 16.04 do 18.04. Dzięki!
ruX
52

Mam podobny błąd w Ubuntu 16.04 64-bit. Dla mnie rozwiązanie nr 23 działa świetnie 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++
luizMello
źródło
To zadziałało dla mnie. Być może będziesz musiał szukać w różnych katalogach dla swojego zestawu SDK dla systemu Android. Mój został znaleziony w/home/daniel/Android/Sdk/tools/lib64/libstdc++
Daniel Levin
Tak, ścieżka sekcji przed „/ tools” może się różnić w zależności od nazw użytkowników i folderu instalacyjnego Sdk.
luizMello
3
potwierdź działanie, w ubuntu xenial ścieżka to /usr/lib/x86_64-linux-gnu/libstdc++.so.6
arisalexis
dziękuję .... to było również rozwiązanie w ubuntu 16.10, ta sama ścieżka jak w powyższym komentarzu ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ~ / Android / Sdk / tools / lib64 / libstdc ++
Juan
29

Użyj opcji „Oprogramowanie” w opcji Emulowana grafika użytkowa w ustawieniach AVD. Bardzo proste rozwiązanie.

saintjab
źródło
To proste, ale bardzo powolne :)
Шах
Pracuj nad Ubuntu 16 64bit, po prostu wybierz z listy rozwijanej :) 10x
Vasil Valchev
To było JEDYNE rozwiązanie, które działało dla mnie (Ubuntu 16.04LTS)
Feu
20

robię to i to działa

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
źródło
Miałem ten błąd z powodu mojego sterownika wideo, ponownie go później zainstalowałem i wszystko zaczęło działać. Zapomniałem już o tym błędzie, to bardzo dziwne, że ktoś wciąż ma problemy, bo w poszukiwaniu wielu rozwiązań w tym ten temat.
Шах
właśnie mam ten błąd 10 minut temu :)
tetar
10

lepiej zlokalizuj domyślną bibliotekę systemową libstdc ++. so.6 za pomocą polecenia locate libstdc ++. so.6

Następnie wykonaj kopię zapasową wersji Android SDK pliku w ~ / Android / Sdk / tools / lib64 / libstdc ++ /

I stwórz miękki link do libstdc ++. So.6 z tą samą nazwą w powyższej ścieżce zastępując istniejący wskazujący na domyślny plik w systemie

W ten sposób nie musimy za każdym razem restartować emulatora z linii poleceń.

BuzzR
źródło
9

Spróbuj zmienić opcję grafiki w ustawieniach emulatora: wprowadź opis obrazu tutaj

Mohsen Kashi
źródło
0

Miałem też wiele problemów z uruchomieniem AVD na moim komputerze. Zmagałem się z używaniem bibliotek systemowych, tworzeniem dowiązań symbolicznych do bibliotek lokalnych itp ...

To, co naprawdę sprawiło, że zadziałało, to zainstalowanie sterowników nvidia z

sudo apt install nvidia-340

Moja dystrybucja (uwaga, nie używam 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

Upewnij się, że sprawdziłeś pakiet nvidia odpowiedni dla Ciebie, ponieważ Ubuntu oferuje różne smaki. Na przykład:

$ 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

Przetestowałem listę w strategii oddolnej, od 361 do znalezienia takiej, która zadziałała (340 w moim przypadku).

Mam nadzieję, że to pomoże.

Alexandre Schmidt
źródło
0

W moim przypadku (Ubuntu 16.10 64-bit, Android Studio 2.3) biblioteki znajdowały się w innym miejscu. Więc polecenia to:

/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

A teraz emulator jest uruchamiany normalnie z menedżera AVD.

porfirion
źródło
0

Miałem podobne problemy z używaniem i965_dri.soi swrast_dri.sonie mogłem przełączyć się na grafikę programową w GUI.

Poszedłem więc do folderu emulatora ( Show on Disklink w AVDM) i znalazłem plikconfig.ini

Tutaj właśnie zmieniłem następującą linię, aby przestać używać GPU:

hw.gpu.enabled=no
jkbadsberg
źródło
-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
źródło