Linux: android studio AVD emulator启动不了 | openGL | glx

来源:互联网 发布:波士顿矩阵图的优缺点 编辑:程序博客网 时间:2024/06/05 14:24

前置条件

目前我台式机电脑的情况是:

OS:Slackware Linux 14.1
显卡:
1)NVidia 独立显卡,用于 GPU计算
2)Intel i3 集成显卡,用于连接 43寸液晶显示器

===================================================

今天安装当前最新版本的 android studio 2.3.2 ,但安装后,AVD模拟器打不开


1) question 1

Xlib:  extension "GLX" missing




原来是安装 NVidia 的驱动时,Nvidia的驱动程序把 原来的 libglx.so 替换了,如下图 NVidia 的驱动版本正是 340.65



查了一下系统的安装包日志,发现 原始的 libglx.so 是在 xorg-server-1.14.3-x86_64-2


于是重新安装 xorg-server-1.14.3-x86_64-2


重启系统后,glxgears 就可以运行起来了(注意:这依然埋藏着一个坑,看question 2)


(出乎我意外的是glxgears竟然能调起libGL.so进行一些openGL的基本计算)


2) question 2



我不知道你们用的linux系统上 GL/glxproto.h 头文件定义长什么样(不同系统上的定义值可能是不同的哦),反正在我的系统上是找不到 168 这个 opcode的定义



glxinfo 依然看到有 NVdia 的东西,看到 OpenGL extensions: 上有 GL_NV_ 这种 NVidia 的实现


什么回事?我已经设置X使用的driver是intel的了,


为什么还会见到nvidia driver相关的的东西

看到 nvidia-application-profiles-340.65-rc,再想到上面的 GL_NV_ ,我就明白了,emulator 调用的依然是 NVidia 的 openGL 库


查看了 libGL.so ,果然发现仍然是 NVidia 驱动安装程序把 libGL.so 替换了NVidia 的实现了。


查了一下系统的安装包日志,发现 原始的  libGL.so 是在 mesa-9.1.7-x86_64-1


于是重新安装 mesa-9.1.7-x86_64-1


安装后,就看到 libGL.so 指向就正确了,用的是 mesa的实现



^_^ 好了,这样 emulator 就开起来了




============== 总结 ================

Q: 为什么 X miss "GLX" extention ?

A: 其实没有 miss "GLX" extention,只是加载的是 NVidia 提供的 GLX,你说 intel 的驱动能兼容么(前置条件说了,我的intel 集显是连接显示器)

Q: 为什么会 invalid request code or no such operation 168

A: intel 驱动把它自己定义的 168 操作码 发给了 NVidia 的 libGL 的 openGL 实现,就相当于 把 intel CPU 的操作码 发给 NVdia GPU 执行,你说能期待正确的运算结果么


=============== 补充 ================

重启系统后,发现 libGL.so.1 又被 NVidia 重新指向了NVidia的实现


考虑到我只使用 NVidia做GPU计算,我就把 NVidia 的 libGL.so.340.65 删除了,再重新安装了 mesa-9.1.7-x86_64-1,emulator又开起来了





==================== 2017-05-18 补充 =======================

今天在用arm的emulator时,又遇到了新的问题,这次是qt库的总量,android的emulator用的是google修改过的qemu,这个qemu用到了qt,这个qt的库路径就在emulator目录下,但程序启动时却加载了/usr/lib64/目录下的qt库,因为我系统上也安装了qt,但和emulator下的qt5版本号不一致







==================== 2017-05-22 补充 =======================

emulator64-arm 


启动不了,是因为昨天因为virtualbox和kvm不能同时启动,我就把kvm重新编译为内核模块了,但忘记 depmod 重新生成 modules.dep,导致modprobe kvm-intel不成功,depmod 一下就好了


x86中运行arm 的emulator就首次运行镜像时要优化镜像内的67个app才慢了一点,其他时间的运行速度都还可以了,足够调试arm的普通类app


阅读全文
1 0
原创粉丝点击