无法在Android上加载libGL.so

我在使用Oracle JDK 7的时候使用了Ubuntu 12.04 (Precise Pangolin),当我从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 

仿真器也非常慢。 我怎么解决这个问题?

我将Android SDK安装到〜/ android-sdk-linux_x86中,所以我做了:

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

这就像链接到/ usr / lib一样解决了错误,但是它不需要root,也不会混淆核心系统目录。

在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)

对于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 

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

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

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

什么适合我(Ubuntu的12.04 64位)只是运行:

  sudo apt-get install libgl1-mesa-dev 

我发现libGL.so存在于/usr/lib/x86_64-linux-gnu/

安装32位版本不起作用。

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

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

但是,这并没有解决我的问题。 事实上,它可能搞砸了我的系统。

这对我在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 

我认为我是对的,没有警告,也没有缓慢……这可能不适用于专有驱动程序。

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

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

我使用Linux Mint 14 – 64位,对我来说,它工作:):

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

NVidia Optimus:

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

  1. 安装大黄蜂(请参阅: 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。 所以我真的不知道我在做什么…。

参考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 

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

在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驱动程序,这可能会导致您的真实video驱动程序的问题。

在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的安装位置创build一个符号链接

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

要使其在Ubuntu 12.10 (Quantal Quetzal)64位上工作,你必须做两件事情:

1)您必须初始化LD_LIBRARY_PATH

例:

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

评论:改变你的位置的path

2)你必须创build一个符号链接

a)使用locate libGLfind正确的库:

 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)创build软链接

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

评论:在64位操作系统上使用64位库!

现在启动模拟器我的系统是Optimus ,我已经安装了大黄蜂 。 我可以使用“Intel开源技术中心”“Mesa DRI Intel(R)Ironlake Mobile”“2.1 Mesa 9.0”或“NVIDIA公司”“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)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密集型的。
  • 在我的系统上,一个Intel Core i5,启动模拟器花了差不多1分钟的时间…请耐心等待…我发现模拟器在加载后相当快(等待1分钟)。 如果从Eclipse IDE启动模拟器,那么仿真器会执行软件仿真(GPUclosures),并花费1分30秒才能启动…这比使用Intel或Nvidia卡要慢得多!
  • verbose是用于显示更多诊断的参数
  • optirun是在大黄蜂上使用Nvidia的命令。 如果你没有大黄蜂不要使用它!
  • avd是一个虚拟设备
  • gpu on使用graphics卡

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

当您尝试首次启动VNL时,它可能会出现在Linux系统上。 为了解决这个问题,创build(以pipe理员身份) /usr/lib的新链接:

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

如果您有一个64位的Linux,请使用/usr/lib64 instead

首先检查在/usr/lib/usr/lib64中是否有libGL.so.1.2 ; 它可能被称为libGL.so.1或别的东西,或位于另一个目录,具体取决于video驱动程序。

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

我遇到过同样的问题。 但在我的情况下,我解决了另一个(我认为,更好)的方式。

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

这解决了从一个文件到另一个文件链接的麻烦,也可以防止污染你的系统:

  • 在几个月(或几年)之后,您将如何知道为保持系统运行而设置了哪些专用链接?
  • 如果你自己开始做这些事情,未来的更新呢? 由于“人工干预”,会不会有东西被破坏/不更新?

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

最好的rgds,

与user1289608类似,我能够从现有的Mesa安装中执行sym链接:

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

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

编辑:它停止错误信息,但模拟器仍然是我的慢。

这对我工作:

从DDMS重新启动adb:
在Eclipse中:Window> Open Perspective …> Other> DDMS。 从左侧窗格中select模拟器,然后select“重新启动adb”

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

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

我通过命令“locate”find了libGL的文件夹,

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

〜$findlibGL
/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

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

 ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 opt/android/tools/lib/libGL.so 
 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 

而已!

我有这个问题,因为我创build我的AVD时,检查“使用主机GPU”。 我试着用这个选项取消选中,我能够成功启动模拟器。 这对于我的testing目的是可以接受的,但是如果使用主机GPU很重要,那么您可能需要尝试其他一些解决scheme。

我有同样的问题。 重新安装Nvidia驱动程序为我解决了分段错误 。

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

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

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

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

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

你不应该这样做 – 这是Android团队的错误。 给他们rest一下,他们只是Java开发人员。