无法在 Linux (Ubuntu 15.10) 上启动模拟器
Cannot launch emulator on Linux (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
如何解决?我阅读了有类似错误的主题,但对我没有帮助。
看看
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
然后启动模拟器,当您 运行 您的应用程序时,您可以在 'Device Chooser' 对话框中 select 它。
使用系统中可用的 libstdc++.so.6 而不是与 android sdk 捆绑的那个可以解决这个问题。
模拟器有一个开关-use-system-libs
可以做到这一点。
~/Android/Sdk/tools/emulator -avd Nexus_5_API_23 -use-system-libs
或者,您可以为您的 user/system 将 ANDROID_EMULATOR_USE_SYSTEM_LIBS
环境变量设置为 1
。这样做的好处是即使您从 Android Studio 中启动模拟器也能确保模拟器正常工作。
更多详情:https://code.google.com/p/android/issues/detail?id=197254#c15
最好使用以下命令找到系统默认的 libstdc++.so.6
找到 libstdc++.so.6
然后在~/Android/Sdk/tools/lib64/libstdc++/
中备份文件的android sdk版本
并在上述路径中为libstdc++.so.6新建一个soft link 同名替换已有的指向系统默认文件
这样我们就不需要每次都从命令行重启模拟器了。
我在 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++
我在我的机器上启动 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)。
希望对您有所帮助。
在 AVD 设置的仿真性能图形选项中使用 "Software"。非常简单的解决方案。
尝试更改模拟器设置中的图形选项:
在我的例子中(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 管理器启动。
$ cd Android/Sdk/emulator/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6
对我有用
我在使用 i965_dri.so
和 swrast_dri.so
时遇到了类似的问题,我无法在 GUI 中更改为软件图形。
所以我去了模拟器的文件夹(AVDM 中的Show on Disk
link)并找到了 config.ini
这里我只是更改了以下行以阻止它使用 GPU:
hw.gpu.enabled=no
我这样做了,而且很有效
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
$ 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
这已在 Android 模拟器 27.2.9 中修复。请参阅此处列出的第一个修复程序:
https://developer.android.com/studio/releases/emulator#fixes
我尝试启动模拟器,但它输出到日志中:
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
如何解决?我阅读了有类似错误的主题,但对我没有帮助。
看看
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
然后启动模拟器,当您 运行 您的应用程序时,您可以在 'Device Chooser' 对话框中 select 它。
使用系统中可用的 libstdc++.so.6 而不是与 android sdk 捆绑的那个可以解决这个问题。
模拟器有一个开关
-use-system-libs
可以做到这一点。~/Android/Sdk/tools/emulator -avd Nexus_5_API_23 -use-system-libs
或者,您可以为您的 user/system 将
ANDROID_EMULATOR_USE_SYSTEM_LIBS
环境变量设置为1
。这样做的好处是即使您从 Android Studio 中启动模拟器也能确保模拟器正常工作。
更多详情:https://code.google.com/p/android/issues/detail?id=197254#c15
最好使用以下命令找到系统默认的 libstdc++.so.6 找到 libstdc++.so.6
然后在~/Android/Sdk/tools/lib64/libstdc++/
中备份文件的android sdk版本并在上述路径中为libstdc++.so.6新建一个soft link 同名替换已有的指向系统默认文件
这样我们就不需要每次都从命令行重启模拟器了。
我在 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++
我在我的机器上启动 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)。
希望对您有所帮助。
在 AVD 设置的仿真性能图形选项中使用 "Software"。非常简单的解决方案。
尝试更改模拟器设置中的图形选项:
在我的例子中(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 管理器启动。
$ cd Android/Sdk/emulator/lib64/libstdc++
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ ln -s /usr/lib64/libstdc++.so.6
对我有用
我在使用 i965_dri.so
和 swrast_dri.so
时遇到了类似的问题,我无法在 GUI 中更改为软件图形。
所以我去了模拟器的文件夹(AVDM 中的Show on Disk
link)并找到了 config.ini
这里我只是更改了以下行以阻止它使用 GPU:
hw.gpu.enabled=no
我这样做了,而且很有效
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
$ 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
这已在 Android 模拟器 27.2.9 中修复。请参阅此处列出的第一个修复程序: https://developer.android.com/studio/releases/emulator#fixes