无法在Linux上启动模拟器(Ubuntu 15.10)

时间:2016-03-10 08:36:48

标签: android-emulator ubuntu-15.10

我尝试启动模拟器,但输出到日志:

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

如何解决?我阅读了类似错误的主题,但它对我没有帮助。

13 个答案:

答案 0 :(得分:170)

使用系统中可用的libstdc ++。so.6而不是与android sdk捆绑的那个解决了这个问题。

  • 模拟器有一个开关-use-system-libs来执行此操作。

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

  • 或者,您可以为您的用户/系统将ANDROID_EMULATOR_USE_SYSTEM_LIBS环境变量设置为1。这样做的好处是,即使您是在Android Studio中启动模拟器,也可以确保模拟器正常工作。

更多详情:https://code.google.com/p/android/issues/detail?id=197254#c15

答案 1 :(得分:123)

$ cd Android/Sdk/emulator/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6

它为我工作

答案 2 :(得分:79)

看看

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

特别是第3和第19项。这是一种解决方法,而不是一个真正的解决方案,但它让我再次感动。您必须调整以下命令:

  • 系统上libstdc++.so.6文件的位置 - 我使用locate libstdc++.so.6查找此内容
  • 模拟器可执行文件的路径
  • 您的模拟器的名称

所以我的命令是

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

然后启动模拟器,您可以在运行应用程序时在“设备选择器”对话框中选择它。

答案 3 :(得分:51)

我在Ubuntu 16.04 64位中有类似的错误。 对我来说,答案#23 解决方案效果很好 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++

答案 4 :(得分:29)

在AVD设置中的“仿真性能图形”选项中使用“软件”。非常简单的解决方案。

答案 5 :(得分:21)

我这样做并且正在工作

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

答案 6 :(得分:10)

使用该命令更好地找到系统默认的libstdc ++。so.6 找到libstdc ++。so.6

然后在〜/ Android / Sdk / tools / lib64 / libstdc ++ /

中备份该文件的android sdk版本

为libstdc ++。so.6创建一个软链接,在上面的路径中使用相同的名称替换指向系统中默认文件的现有路径

这样我们每次都不需要从命令行重启模拟器。

答案 7 :(得分:9)

尝试在模拟器设置中更改图形选项: enter image description here

答案 8 :(得分:0)

我的机器上启动AVD也遇到了很多问题。使用系统库,创建符号链接到本地​​库等等...... [/ p>

真正让我感到满意的是用

安装nvidia驱动程序
sudo apt install nvidia-340

我的发行版(注意我没有使用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

请确保检查适合您的nvidia软件包,因为Ubuntu提供了不同的风格。例如:

$ 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

我用自下而上的策略测试了这个列表,从361开始直到找到一个有效的(在我的情况下为340)。

希望有所帮助。

答案 9 :(得分:0)

在我的情况下(Ubuntu 16.10 64位,Android Studio 2.3)libs位于另一个地方。所以命令是:

/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

现在仿真器通常是从AVD管理器启动的。

答案 10 :(得分:0)

我在使用i965_dri.soswrast_dri.so方面遇到了类似的问题,我无法在GUI中更改为软件图形。

所以我去了模拟器的文件夹(AVDM中的Show on Disk链接)并找到了config.ini

这里我刚刚更改了以下行以阻止它使用GPU:

hw.gpu.enabled=no

答案 11 :(得分:0)

Android Emulator 27.2.9中已修复此问题。请参阅此处列出的第一个修复: https://developer.android.com/studio/releases/emulator#fixes

答案 12 :(得分:-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