【问题标题】:Cannot launch emulator on Linux (Ubuntu 15.10)无法在 Linux (Ubuntu 15.10) 上启动模拟器
【发布时间】:2016-06-24 23:47:28
【问题描述】:

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

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

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

【问题讨论】:

标签: android-emulator ubuntu-15.10


【解决方案1】:

使用系统中可用的 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

【讨论】:

  • 然后,当您尝试运行您的应用时,您的 Android Studio 中会出现一个已连接的设备(在本例中为 Nexus_5_API_23)。
  • 这是 imo 的最佳答案,因为模拟器可以通过 shell 脚本正确启动,而无需移动或链接现有的 sdk 库。
  • 在 Ubuntu 16.10 上 export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1 必须添加到 $HOME/.profile
  • 未知选项:-use-system-libs :(
  • @GregDan: 或/etc/environment
【解决方案2】:
$ cd Android/Sdk/emulator/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6

它对我有用

【讨论】:

  • 看来我必须安装 libstdc++ 之后才能运行模拟器,谢谢您的帮助!
  • 我的 libstdc++.so.6 位于 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
  • @Joshua - 正确。对于 Ubuntu 17.10+,最后一步需要以下内容 $ ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6
  • 为我工作。不过我很想知道是什么破坏了它。
  • 这个解决方案对我有用。从 Ubuntu 16.04 更新到 18.04 后,模拟器崩溃了。谢谢!
【解决方案3】:

看看

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 上启动,但模拟器屏幕仅显示黑色。
  • 我用丑陋的方式解决了这个问题:cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $ANDROID_HOME/tools/lib/libstdc++/libstdc++.so.6
  • 如果有帮助,您可以找到模拟器的名称:LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6' ~/Android/Sdk/tools/emulator -list-avds
【解决方案4】:

我在 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++

【讨论】:

  • 这对我有用。不过,您可能需要在不同的目录中查找您的 android sdk。我的发现是在/home/daniel/Android/Sdk/tools/lib64/libstdc++
  • 是的,“/tools”之前的部分路径可以根据用户名和Sdk安装文件夹而有所不同。
  • 确认工作,在ubuntu xenial中路径是/usr/lib/x86_64-linux-gnu/libstdc++.so.6
  • 谢谢....这也是 ubuntu 16.10 中的解决方案,与上述评论 ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 中的路径相同~/Android/Sdk/tools/lib64/libstdc++
【解决方案5】:

在 AVD 设置的 Emulated Performance Graphics 选项中使用“软件”。非常简单的解决方案。

【讨论】:

  • 这很简单但是很慢:)
  • 在 ubuntu 16 64bit 上工作,只需下拉选择 :) 10x
  • 这是唯一对我有用的解决方案(Ubuntu 16.04LTS)
【解决方案6】:

我这样做了,它正在工作

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 分钟前刚遇到这个错误 :)
【解决方案7】:

使用以下命令更好地定位您的系统默认 libstdc++.so.6 找到 libstdc++.so.6

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

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

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

【讨论】:

    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

      在我的机器上启动 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)。

      希望对您有所帮助。

      【讨论】:

        【解决方案10】:

        在我的情况下(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 管理器正常启动了。

        【讨论】:

          【解决方案11】:

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

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

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

          hw.gpu.enabled=no
          

          【讨论】:

            【解决方案12】:

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

            【讨论】:

              【解决方案13】:

              $ 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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-06-09
                • 2018-05-27
                • 2016-05-15
                • 2017-08-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-02-05
                相关资源
                最近更新 更多