无法在Android上加载libGL.so

时间:2012-07-04 16:38:08

标签: android

我正在使用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

此外,模拟器非常慢。我该如何解决这个问题?

26 个答案:

答案 0 :(得分: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,也不会破坏核心系统目录。

答案 1 :(得分: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

来源: Installing required packages (Ubuntu 12.04)

答案 2 :(得分:32)

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

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

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

答案 3 :(得分: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

答案 4 :(得分:14)

对我来说有用(ubuntu 12.04 64bit)只是为了运行:

    sudo apt-get install libgl1-mesa-dev

我发现目录libGL.so

中存在/usr/lib/x86_64-linux-gnu/

32位版本的安装无效。

答案 5 :(得分:6)

在64位Ubuntu 12.04上,没有/ usr / lib64。它只是/ usr / lib。 另外,在我的机器上,libGL.so不存在。而是文件是libGLEW.so

要安装/usr/lib/LibGL.so,您可以运行: sudo apt-get install libgl1-mesa-dev

然而,它并没有为我解决问题。事实上,它可能搞砸了我的系统。

答案 6 :(得分:4)

我认为我做对了,没有警告也没有缓慢......但这可能不适用于专有驱动程序。

确保安装了libgl1-mesa-glx:i386(即使你有一个x64 SO文件)。然后做:

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

答案 7 :(得分: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

答案 8 :(得分:3)

我使用Linux Mint 14 - 64位,对我来说,它有效:):

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

答案 9 :(得分:3)

参考http://developer.android.com/sdk/installing/index.html,我安装了ia32-libs并做了:

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

这就是我为解决这个问题所做的一切。

答案 10 :(得分:3)

NVidia Optimus:

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

  1. 安装Bumblebee(参见:https://wiki.ubuntu.com/Bumblebee#Installation
  2. 安装所需的lib。
  3. 在nvidia离散卡上运行模拟器。
  4. 这应该可以解决问题:

    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。所以我真的不知道我在做什么......

答案 11 :(得分: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

答案 12 :(得分:2)

要使其适用于Ubuntu 12.10(Quantal Quetzal)64位,您必须做两件事:

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。我可以使用英特尔开源技术中心&#34; &#34; Mesa DRI英特尔(R)Ironlake Mobile&#34; &#34; 2.1 Mesa 9.0&#34;或者&#34; NVIDIA公司&#34; &#34; GeForce GT 330M / PCIe / SSE2&#34; &#34; 3.3.0 NVIDIA 304.43&#34;。

a)英特尔

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

b)Nvidia

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

评论:

  • 我没有看到英特尔和Nvidia卡之间存在任何差异......当然是因为模拟器不是GPU密集的。
  • 在我的系统上使用英特尔酷睿i5,启动仿真器花了将近1分钟...请耐心等待...我发现仿真器在加载后相当快(1分钟等待)。如果你从Eclipse IDE启动模拟器,那么模拟器会进行软件模拟(GPU关闭)并花费1分30秒启动...它比使用英特尔要慢得多或者是Nvidia卡!!!
  • verbose是用于显示更多诊断的参数
  • optirun是在Bumblebee上使用Nvidia的命令。如果你不让Bumblebee不使用它!
  • avd是虚拟设备
  • gpu on使用图形卡

答案 13 :(得分: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驱动程序,这可能会导致您的真实视频驱动程序出现问题。

答案 14 :(得分:1)

与user1289608类似,我可以从现有的Mesa安装程序中进行sym链接:

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

答案 15 :(得分:1)

我有同样的问题。但就我而言,我解决了另一个问题(我想,更好)。

在我的情况下(Lubuntu 13.10),只需通过Synaptic Package Manager安装库libgl1-mesa-dev就足够了(默认情况下,在设置Lubuntuu发行版时已经安装了libgl1-mesa-dri库) 。

解决了将链接从一个文件放到另一个文件的所有麻烦,并且还可以防止污染您的系统:

  • 几个月(或几年)之后,您如何知道您为保持系统运行而使用了哪些专用链接?
  • 如果您自己开始做这些事情,未来的更新怎么样?由于“人工干预”,某些事情会被打破/不更新吗?

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

最佳rgds,

答案 16 :(得分: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或其他内容,或位于另一个目录中,具体取决于视频驱动程序。

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

答案 17 :(得分:0)

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

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

答案 18 :(得分:0)

我遇到了这个问题,因为我在创建AVD时检查了“使用主机GPU”。我试用了该选项未选中,我能够成功启动模拟器。这对我的测试来说是可以接受的,但是如果使用主机GPU很重要,那么你可能想在这里尝试一些其他的解决方案。

答案 19 :(得分: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

就是这样!

答案 20 :(得分:0)

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

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

  

〜$ locate 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

答案 21 :(得分:0)

我遇到了同样的问题。重新安装Nvidia驱动程序为我修复了segmentation fault

答案 22 :(得分:0)

这对我有用:

从DDMS重新启动adb:
在Eclipse中:Window&gt; Open Perspective ...&gt;其他&gt; DDMS。从左侧窗格中选择模拟器,然后选择“重新启动adb”

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

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

答案 23 :(得分:0)

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

编辑:它会停止错误消息,但模拟器对我来说仍然很慢。

答案 24 :(得分:-1)

我通过重新安装libgl1解决了这个问题,包括64位和32位库:

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

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

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

答案 25 :(得分:-2)

检查您是否安装了libgl1-mesa-*个软件包。如果是这样,请安装libgl1-mesa-dev包以获取未版本化的共享对象。

你不应该这样做 - 这是Android团队的错误。给他们一个休息,他们只是Java开发人员。