在Android上加载libGL.so失败

82

我正在使用Ubuntu 12.04(Precise Pangolin)和OracleJDK 7,当我从Eclipse运行Android模拟器时,它会给出此错误:

[2012-07-04 02:52:10 - Emulator] error libGL.so: cannot open shared object file: No such file or directory 
[2012-07-04 02:52:10 - Emulator] Failed to load libGL.so

模拟器运行速度非常慢,我该怎么解决这个问题?

26个回答

82

我已经将Android SDK安装在~/android-sdk-linux_x86中,所以我执行了以下操作:

ln -s /usr/lib/libGL.so.1 ~/android-sdk-linux_x86/tools/lib/libGL.so

这解决了与链接到 /usr/lib 相同的错误,但不需要 root 权限,也不会干扰核心系统目录。


5
这个结合了libo的"apt-get"命令是这里最干净的解决方案。 - Dave Cameron
如果您尚未安装libGL.so.1,则可能需要使用libo的解决方案,但这是链接文件的最干净的位置。 不需要将32位放入64位库中... - Ajax
23
首先尝试定位 libGL 可能会有帮助。 - yuan
2
我在 debian jessie 上使用了 find / -name 'libGL.so.1' 命令,并将其定位于 /usr/lib/x86_64-linux-gnu - Justin Skiles

35

在64位的Ubuntu 12.04上,可以这样做:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

来源:安装必备软件包(Ubuntu 12.04)


2
这搞砸了我的系统。 - Alexandros
结合这个答案 - http://askubuntu.com/a/144194 来解决依赖问题(使用aptitude来定位依赖关系并查看是什么导致了问题),最终运行命令 sudo apt-get install --reinstall gcc-4.7-multilib,正如我在答案http://askubuntu.com/a/236114中发现的那样。 - Aleks
我必须先执行“sudo apt-get install libglapi-mesa”,然后再执行“sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386”。 - stackOverlord
我认为我不需要为x86安装libGL,只需使用./sdk/tools/emulator64-x86即可(请注意“64”)。 - jcarballo
1
哦,老兄,发布大量的应用安装行为,没有任何解释或警告是不好的。 - Sebastian Mach

32

对于32位Ubuntu 12.04 LTS,这个方法可行:

sudo apt-get install libgl1-mesa-dev

以下方法均未生效:

cd /usr/lib/i386-linux-gnu/mesa/
sudo ln -s libGL.so.1.2 libGL.so 
sudo ln -s libGL.so.1.2 /usr/lib/libGL.so
ln -s libGL.so.1.2 ~/android/android-sdk-linux/tools/lib/libGL.so

适用于13.04版本。请注意,如果将符号链接放在tools/lib目录中,则必须再次将其删除。 - Perseids
2
apt-get 命令在 Ubuntu 13.04 x64 上也可以工作,无需符号链接。 - Jason McVetta

32

我正在使用64位的Ubuntu 12.04。使用以下命令来解决问题:

 sudo ln -s /usr/lib32/fglrx/libGL.so.1.2 /usr/lib/libGL.so

注意:此仅适用于使用AMD / ATI图形驱动程序的用户。


1
这对我也起作用了,我认为这只适用于ATI显卡。从技术上讲,这是错误的,因为它将32位共享库符号链接到(64位)/lib/目录中,但看起来Android模拟器只会在那里查找此库。 - Alex Pretzlav
3
我建议进行文件搜索以查找libGL.so,并根据位置调整链接命令。我的文件路径是:/usr/lib/i386-linux-gnu/mesa - bytebender
2
我的问题出在 /usr/lib/x86_64-linux-gnu/mesa/libGL.so,但是当我尝试运行时会出现错误,因为它需要一个32位的库,而我提供了一个64位的库。 - Ben McCann

14

对我来说有效的方法(在ubuntu 12.04 64位系统上)只需要运行:

    sudo apt-get install libgl1-mesa-dev
我发现/usr/lib/x86_64-linux-gnu/目录下存在libGL.so文件。

安装32位版本失败。



6
在64位Ubuntu 12.04上,没有/usr/lib64目录,只有/usr/lib目录。此外,在我的机器上,libGL.so文件不存在。相反,文件是libGLEW.so。
要安装/usr/lib/LibGL.so,您可以运行: sudo apt-get install libgl1-mesa-dev
然而,对我来说这并没有解决问题。实际上,它可能会损坏我的系统。

经过 Synaptic 检查,libgl1-mesa-dev 将 libGL.so 安装到 /usr/lib/x86_64-linux-gnu/libGL.so。 - sergio91pt
1
GLEW是一个不同的库,即OpenGL扩展包装器。它不是“替代品”,而是程序可以在libGL之外另外使用的东西。 - Wyzard

4

以下内容适用于我使用的64位Ubuntu 12.10和ADT工具包:

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 ~/adt-bundle-linux-x86_64/sdk/tools/lib/libGL.so

如果你没有/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1,只需安装libgl1-mesa-glx即可。
sudo apt-get install libgl1-mesa-glx

4

我想我做得对,没有警告和减速...但这可能不适用于专有驱动程序。

确保安装了libgl1-mesa-glx:i386(即使您得到了一个x64的SO文件)。然后执行以下操作:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so

3

不错,但我不得不使用/usr/lib/x86_64-linux-gnu/mesa - Joril

3

我使用的是Linux Mint 14 - 64位,对我来说,它运行良好 :)

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接