Não é possível iniciar o emulador no Linux (Ubuntu 15.10)

103

Tento iniciar o emulador, mas a saída é no log:

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

Como corrigi-lo? Eu leio tópicos com erros semelhantes, mas isso não me ajuda.

Шах
fonte
encontre aqui uma solução conveniente sem os extralines fornecidos nesta resposta: [ github.com/rimian/cordova-ember-android]
refle de

Respostas:

79

Dê uma olhada em

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

em itens específicos # 3 e # 19. Esta é uma solução alternativa em vez de uma solução verdadeira, mas me fez mover novamente. Você terá que ajustar o comando para:

  • a localização do libstdc++.so.6arquivo em seu sistema - costumava locate libstdc++.so.6encontrar este
  • o caminho para o executável do emulador
  • o nome do seu emulador

então meu comando foi

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

Isso, então, inicia o emulador e você pode selecioná-lo na caixa de diálogo 'Seletor de dispositivo' ao executar seu aplicativo.

Marca
fonte
Obrigado! Mas no meu caso o SO não vê o pacote fglrx embora eu o instalei e funcionou. Mas depois de atualizações do sistema, recebi esse bug. Reinstalei esse pacote e ele voltou a funcionar :) Desculpe pelo inglês.
Шах,
A correção descrita na postagem 23 do link permitiu que meu emulador fosse iniciado no Ubuntu 16.04, mas a tela do emulador só fica preta.
dazza5000
5
Eu resolvi o problema da maneira mais feia: cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $ANDROID_HOME/tools/lib/libstdc++/libstdc++.so.6
Yu Jiaao
Caso seja útil, você pode encontrar o nome do emulador com:LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -list-avds
DaveyDaveDave
170

Usar o libstdc ++. So.6 que está disponível em seu sistema, em vez do pacote com o SDK do Android, resolve esse problema.

  • O emulador tem um switch -use-system-libspara fazer isso.

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

  • Como alternativa, você pode definir a ANDROID_EMULATOR_USE_SYSTEM_LIBSvariável de ambiente para 1para seu usuário / sistema. Isso tem a vantagem de garantir que o emulador funcione, mesmo que você o inicie de dentro do Android Studio.

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

exception_noted
fonte
E depois disso em seu Android Studio aparecerá um dispositivo conectado (neste caso Nexus_5_API_23) quando você tentar executar seu aplicativo.
Alejo Bernardin
3
Esta é a melhor resposta, pois o emulador pode ser iniciado corretamente por meio de um script de shell sem ter que mover ou vincular as bibliotecas SDK existentes.
Potaito 02 de
19
no Ubuntu 16.10 export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1deve ser adicionado a$HOME/.profile
Greg Dan
opção desconhecida: -use-system-libs :(
Jaroslav Záruba
1
@GregDan: ou para/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

funcionou para mim

Mortada Jafar
fonte
1
Parece que tive que instalar o libstdc ++ e só depois disso consegui rodar o simulador, obrigado pela ajuda!
Pini Cheyni de
6
my libstdc ++. so.6 conforme localizado em /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Joshua
2
@Joshua - correto. Para Ubuntu 17.10+, você precisa do seguinte para a última etapa $ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Timothy C. Quinn
Funcionou para mim. Eu adoraria saber o que o quebrou.
Toby Wilson
Esta solução funciona para mim. O emulador quebrou após a atualização do Ubuntu 16.04 para 18.04. Obrigado!
ruX
52

Eu tenho um erro semelhante no Ubuntu 16.04 de 64 bits. Para mim, a resposta # 23 solução funciona muito bem https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter % 20Aberto & 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
fonte
Isso funcionou para mim. Você pode ter que procurar em diretórios diferentes para o seu SDK do Android. O meu foi encontrado em/home/daniel/Android/Sdk/tools/lib64/libstdc++
Daniel Levin
Sim, o caminho da seção antes de "/ tools" pode variar dependendo dos nomes de usuário e da pasta de instalação SDK.
luizMello
3
confirme o funcionamento, no ubuntu xenial o caminho é /usr/lib/x86_64-linux-gnu/libstdc++.so.6
arisalexis
obrigado .... essa também era a solução no ubuntu 16.10, mesmo caminho do comentário acima ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ~ / Android / Sdk / tools / lib64 / libstdc ++
Juan
29

Use "Software" na opção Emulated Performance Graphics, nas configurações do AVD. Solução muito simples.

Saintjab
fonte
É simples, mas muito lento :)
--ах
Trabalhe no ubuntu 16 64 bits, basta selecionar o menu suspenso :) 10x
Vasil Valchev
Essa foi a ÚNICA solução que funcionou para mim (Ubuntu 16.04LTS)
Feu
20

eu faço isso e está funcionando

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
fonte
Tive esse bug devido ao driver de vídeo, reinstalei depois e tudo começou a funcionar. Já esqueci desse bug, é muito estranho que alguém ainda tenha problemas pq em buscar muitas soluções inclusive nesse tópico.
Шах
Acabei de ter esse bug há 10 minutos :)
tetar
10

localize melhor o libstdc ++. so.6 padrão do sistema usando o comando locate libstdc ++. so.6

E, em seguida, faça um backup da versão SDK do Android do arquivo em ~ / Android / Sdk / tools / lib64 / libstdc ++ /

E crie um soft link para libstdc ++. So.6 com o mesmo nome no caminho acima, substituindo o existente apontando para o arquivo padrão no sistema

Dessa forma, não precisamos reiniciar o emulador todas as vezes na linha de comando.

BuzzR
fonte
9

Tente alterar a opção de gráficos nas configurações do emulador: insira a descrição da imagem aqui

Mohsen Kashi
fonte
0

Eu também estava tendo muitos problemas para iniciar o AVD em minha máquina. Tive dificuldade em usar bibliotecas de sistema, criar links simbólicos para bibliotecas locais, etc ...

O que realmente fez funcionar para mim foi instalar os drivers da nvidia com

sudo apt install nvidia-340

Minha distro (observe que não estou 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

Certifique-se de verificar o pacote nvidia adequado para você, pois o Ubuntu oferece diferentes sabores. Por exemplo:

$ 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

Testei a lista em uma estratégia de baixo para cima, de 361 até encontrar uma que funcionou (340, no meu caso).

Espero que ajude.

Alexandre Schmidt
fonte
0

No meu caso (Ubuntu 16.10 64 bits, Android Studio 2.3), as bibliotecas estavam localizadas em outro lugar. Portanto, os comandos são:

/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 agora o emulador é iniciado normalmente a partir do gerenciador de AVD.

Porfirion
fonte
0

Tive problemas semelhantes ao usar i965_dri.soe swrast_dri.sonão consegui mudar para gráficos de software na GUI.

Então fui até a pasta do emulador ( Show on Disklink no AVDM) e encontrei oconfig.ini

Aqui, acabei de alterar a seguinte linha para impedi-lo de usar a GPU:

hw.gpu.enabled=no
jkbadsberg
fonte
-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
fonte