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


103

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

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

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


在这里找到一个方便的解决方案,而无需在此答案中给出多余的注释
refle

Answers:


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

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


谢谢!但是在我的情况下,尽管我安装了fglrx软件包,但它仍能正常工作,但它却没有看到它。但是在系统更新后,我得到了这个错误。我重新安装了此程序包,它又开始工作了:)对不起,英语。
Шах

通过链接在文章#23中概述的修复程序允许我的仿真器在Ubuntu 16.04上启动,但是仿真器屏幕仅显示黑色。
dazza5000 '16

5
我以丑陋的方式解决了这个问题: cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $ANDROID_HOME/tools/lib/libstdc++/libstdc++.so.6
于嘉ao

如果有帮助,您可以通过以下方式找到模拟器的名称:LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -list-avds
DaveyDaveDave

170

使用系统中可用的libstdc ++。so.6而不是与android sdk捆绑在一起的libstdc ++。so.6解决了此问题。

  • 仿真器具有-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


之后,当您尝试运行应用时,Android Studio中将出现一个已连接的设备(在本例中为Nexus_5_API_23)。
Alejo Bernardin

3
这是imo的最佳答案,因为可以通过Shell脚本正确启动仿真器,而不必移动或链接现有的sdk库。
Potaito

19
必须将Ubuntu 16.10 export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1上的版本添加到$HOME/.profile
Greg Dan

未知选项:-use-system-libs :(
JaroslavZáruba17年

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

对我有用


1
看来我必须安装libstdc ++,然后才能够运行模拟器,谢谢您的帮助!
Pini Cheyni

6
我的libstdc ++。so.6位于/usr/lib/x86_64-linux-gnu/libstdc++.so.6
Joshua

2
@约书亚-正确。对于Ubuntu 17.10+,最后一步需要以下内容:$ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Timothy C. Quinn,

为我工作。我很想知道是什么导致了它。
Toby Wilson

这个解决方案对我有用。从Ubuntu 16.04更新到18.04后,模拟器中断。谢谢!
ruX

52

我在64位Ubuntu 16.04中有类似的错误。对我来说,答案#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++

这对我有用。您可能需要在android sdk中查找不同的目录。该矿位于/home/daniel/Android/Sdk/tools/lib64/libstdc++
Daniel Levin

是的,“ / tools”之前的部分路径可以根据用户名和Sdk安装文件夹而有所不同。
luizMello

3
确认工作正常,在ubuntu xenial中,路径为/usr/lib/x86_64-linux-gnu/libstdc++.so.6
arisalexis

谢谢....这也是ubuntu 16.10中的解决方案,与上面的注释ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6〜/ Android / Sdk / tools /相同lib64下/的libstdc ++

29

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


这是一个简单但很慢:)
Шах

在ubuntu 16 64bit上工作,只需下拉选择即可:) 10x
Vasil Valchev

那是唯一对我有用的解决方案(Ubuntu 16.04LTS)
Feu

20

我这样做,它正在工作

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

由于我的视频驱动程序,我遇到了这个错误,后来我重新安装了它,然后一切开始工作。我已经忘记了这个错误,很奇怪,仍然有人在搜索包括该主题在内的许多解决方案时遇到问题。
Шах

我10分钟前
才遇到

10

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

然后在〜/ Android / Sdk / tools / lib64 / libstdc ++ /中备份该文件的android sdk版本

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

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



0

在计算机上启动AVD时,我也遇到很多问题。努力使用系统库,创建到本地库的符号链接等。

对我来说真正起作用的是用以下命令安装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)。

希望能有所帮助。


0

就我而言(Ubuntu 16.10 64位,Android Studio 2.3),库位于另一个位置。所以命令是:

/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管理器正常启动模拟器。


0

使用i965_dri.so和存在类似的问题swrast_dri.so,但是我无法在GUI中更改为软件图形。

因此,我转到了仿真器的文件夹(Show on DiskAVDM中的链接),找到了config.ini

在这里,我只是更改了以下行以停止使用GPU:

hw.gpu.enabled=no


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.