无法在Android上加载libGL.so


82

我将Ubuntu 12.04(精确的穿山甲)与Oracle JDK 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

模拟器也很慢。我怎么解决这个问题?

Answers:


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”命令是这里最干净的解决方案。
戴夫·卡梅隆

如果还没有libGL.so.1,则可能需要使用libo解决方案,但这是链接文件的最干净的地方。无需在64位库中放入32位。...–
Ajax

23
locate libGL起初可能会有所帮助
人民币

2
我用过find / -name 'libGL.so.1'它并/usr/lib/x86_64-linux-gnu放在上debian jessie
贾斯汀·斯基尔斯

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

此答案与答案结合使用-askubuntu.com/a/144194用于解决依赖关系(使用能力来定位依赖关系并查看导致问题的原因),并最终运行sudo apt-get install --reinstall gcc-4.7-multilib我在答案askubuntu.com/a/236114上
Aleks

我必须先执行“ sudo apt-get install libglapi-mesa”,然后再执行“ sudo apt-get install libglapi-mesa”:
stackOverlord

我想我不必为x86安装libGL,足以使用./sdk/tools/emulator64-x86?(请注意“ 64”)
jcarballo 2014年

1
哦,伙计,发布了大量的应用程序安装信息,没有任何形式的解释或警告都是不好的。
塞巴斯蒂安·马赫2014年

32

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

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

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


1
这也对我有用,我认为这仅适用于ATI卡。从技术上讲这是错误的,因为它将32位共享库符号链接到(64位)/ lib /目录中,但是看起来Android仿真器只会在其中找到该lib。
Alex Pretzlav 2012年

3
我建议对libGL.so进行文件搜索,并根据位置调整链接命令。我的碰巧是在:/ usr / lib / i386-linux-gnu / mesa
bytebender 2012年

2
我的位于/usr/lib/x86_64-linux-gnu/mesa/libGL.so,但如果我尝试运行它会导致错误,因为它想要一个32位的lib,我提供了一个64位的lib
Ben McCann

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

1
12.10也是如此
logcat

Linux Mint同样适用
-Sephy,

适用于13.04。请注意,如果将符号链接放在tools / lib目录中,则必须再次将其删除。
英仙座

2
apt-get命令也可在Ubuntu 13.04 x64上使用,无需符号链接。
杰森·麦维塔

14

对我有效的(ubuntu 12.04 64bit)只是要运行:

    sudo apt-get install libgl1-mesa-dev

我发现libGL.so目录中存在/usr/lib/x86_64-linux-gnu/

无法安装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 2012年

1
GLEW是另一个库,OpenGL扩展Wrangler。这不是一个“代替”,它是程序可以在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

NVidia Optimus:

在双图形(intel和nvidia)上运行时,我使用了以下命令:

  1. 安装Bumblebee(请参阅:https : //wiki.ubuntu.com/Bumblebee#Installation
  2. 安装所需的库。
  3. 在nvidia离散卡上运行仿真器。

这应该可以解决问题:

sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update 
sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic 
sudo apt-get install ia32-libs

每当您希望运行仿真器时,只需使用optirun:

optirun emulator @<avd_name>

我应该警告我昨天才安装Linux。所以我真的不知道我在做什么……。




2

在Ubuntu 12.04 64位GNOME 3.4上,我首先参考http://developer.android.com/sdk/installing/index.html并安装了ia32-lib,它将生成/ usr / lib / i386-linux-gnu /mesa/libGL.so.1.2.0

然后我运行以下命令并解决了这个问题:

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

这与Gridstation的答案略有不同。

我想不需要在本地安装Mesa驱动程序,这可能会导致真正的视频驱动程序出现问题。


2

在Ubuntu 64位上,

1.检查libGL,

$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

2.创建一个安装SDK的符号链接

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so

我可以确认这可以解决Ubuntu 64bit下的问题。
Yermo Lamers

2

要使其在64位Ubuntu 12.10(定量Quetzal)上运行,您必须做两件事:

1)您必须初始化LD_LIBRARY_PATH

示例:

export LD_LIBRARY_PATH=~/tests/android/adt-bundle-linux-x86_64/sdk/tools/lib

评论:更改路径到您的位置

2)您必须创建一个符号链接

a)locate libGL用于查找正确的库:

rudy@vsolutions:~$ locate libGL
/home/rudy/opt/android/android-sdk-linux/tools/lib/libGLES_CM_translator.so
/home/rudy/opt/android/android-sdk-linux/tools/lib/libGLES_V2_translator.so
/usr/lib/i386-linux-gnu/libGLU.so.1
/usr/lib/i386-linux-gnu/libGLU.so.1.3.1
...
/usr/lib32/nvidia-current/libGL.so.304.43

b)创建软链接

sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so

注释:在64位操作系统上使用64位库!

现在启动模拟器。 我的系统是Optimus,并且我已经安装了Bumblebee。我可以使用“英特尔开放源技术中心”,“ Mesa DRI英特尔(R)Ironlake Mobile”,“ 2.1 Mesa 9.0”或“ NVIDIA Corporation”,“ GeForce GT 330M / PCIe / SSE2”,“ 3.3.0 NVIDIA 304.43”。

a)英特尔

/home/rudy/tests/android/adt-bundle-linux-x86_64/sdk//tools/emulator64-arm -avd avd_42 -scale 0.46 -gpu on -verbose

b)英伟达

optirun /home/rudy/tests/android/adt-bundle-linux-x86_64/sdk//tools/emulator64-arm -avd avd_42 -scale 0.46 -gpu on -verbose

评论:

  • 我没有看到Intel卡和Nvidia卡之间的任何区别……这肯定是因为仿真器不占用GPU
  • 在我的系统上,英特尔酷睿i5花费了将近1分钟的时间来启动仿真器……请耐心等待……我发现仿真器在加载后相当快(等待1分钟)。如果您从Eclipse IDE启动仿真器,则该仿真器会进行软件仿真(GPU处于关闭状态)并花30分钟(1分钟)启动……这比使用Intel或Nvidia卡要慢得多!!!
  • verbose 是用于显示更多诊断信息的参数
  • optirun是在大黄蜂上使用Nvidia的命令。如果您没有大黄蜂,请不要使用它!
  • avd 是虚拟设备
  • gpu on 利用图形卡

1

OSError:libGL.so:无法打开共享对象文件:没有这样的文件或目录

首次尝试启动VNL时,它可能会出现在Linux系统上。要解决此问题,请(以管理员身份)在中创建一个新链接/usr/lib

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

如果您使用的是64位Linux,请使用/usr/lib64 instead

首先检查你确实有libGL.so.1.2/usr/lib/usr/lib64; libGL.so.1根据视频驱动程序的不同,它可能被调用或其他名称,或者位于另一个目录中。

您可以使用定位libGL找到正确的文件链接。


1

我遇到过同样的问题。但就我而言,我以另一种(我认为更好)的方式解决了它。

在我的情况下(Lubuntu 13.10),只需libgl1-mesa-dev通过Synaptic软件包管理器安装该库就足够了(libgl1-mesa-dri默认情况下,在安装Lubuntuu发行版时,该库已默认安装)。

这解决了将链接从一个文件放置到另一个文件的所有麻烦,并且还避免了污染您的系统:

  • 在几个月(或几年)后,您如何知道您使用了哪些专用链接来保持系统运行?
  • 如果您自己开始做这些事情,将来的更新又如何呢?是否会由于“手动干预”而损坏/不更新某些内容?

如果您使用“系统机制”,那么一切都为您完成。并正确完成。这就是为什么这些工具首先存在的原因。

最好的RGB


刚才看到@Tanyasipeti通过apt-get做了同样的事情。但就我而言,它完全解决了问题。我启动并运行了模拟器。
GeertVc 2013年

我自己想出了13.10,并想添加类似的内容作为答案!
Veger 2013年

1

与user1289608相似,我能够从现有的Mesa安装中建立符号链接:

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

0

我正在使用Ubuntu 12.04 64位。链接/usr/lib64/libGLC.so.0/usr/lib64/libGL.so似乎可以解决问题。

编辑:它停止错误消息,但是仿真器对我来说仍然很慢。


是的,仿真器对我来说也非常慢。
IgorGanapolsky

0

这为我工作:

从DDMS重新启动adb:
在Eclipse中:窗口> Open Perspective ...>其他> DDMS。从左侧窗格中选择仿真器,然后选择“重新启动adb”

您也可以从终端窗口重新启动adb服务器。

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server

0

我通过命令“ locate”找到了libGL的文件夹

原来是在/ usr / lib / i386-linux-gnu /中

〜$找到libGL
/usr/lib/i386-linux-gnu/libGLEW.so.1.8
/usr/lib/i386-linux-gnu/libGLEW.so.1.8.0
/ usr / lib / i386-linux-gnu / libGLEWmx .so.1.8
/usr/lib/i386-linux-gnu/libGLEWmx.so.1.8.0
/usr/lib/i386-linux-gnu/libGLU.so.1
/ usr / lib / i386-linux-gnu / libGLU .so.1.3.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0


0

对于我的Debian 7'Wheezy'安装,我使用以下命令:

ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 opt/android/tools/lib/libGL.so

0
sudo apt-get install libgl1-mesa-dev
cd ~/Development/adt-bundle-linux-x86_64-20140321/sdk/tools/lib
unlink libGL.so 
ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 libGL.so

而已!


0

我遇到了这个问题,因为在创建我的AVD时我已经选中了“使用主机GPU”。我尝试了未选中该选项的情况,因此能够成功启动模拟器。对于我的测试目的,这是可以接受的,但是如果使用主机GPU很重要,则可能需要在此处尝试其他一些解决方案。



-1

我通过重新安装64位和32位库libgl1解决了此问题:

$ sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-glx:i386

背景:以前,我从免费的radeon驱动程序切换回了fglrx。我想这某种程度上搞砸了我的libgl1,因为fglrx带有它自己的版本。

此外,我认为这里提供的其他解决方案可能很危险,因为将32位共享库符号链接到(64位)/ lib /目录是错误的。


-2

检查是否libgl1-mesa-*安装了软件包。如果是这样,请安装libgl1-mesa-dev软件包以获取未版本控制的共享库。

您不必这样做-这是Android团队的错误。休息一下,他们只是Java开发人员。


我的系统中已经有mesa-libGL-dev,但仍然有错误
php.khan 2012年

这对我在32位Ubuntu 11.10上有效。我安装了libgl1-mesa-dev,启动乳化器时不再出现错误消息。我不需要执行任何链接,但是也许这在64位上是必需的?
凯瑟琳·里克斯
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.