无法在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)上运行,我使用了以下内容:
- 安装大黄蜂(请参阅: https : //wiki.ubuntu.com/Bumblebee#Installation )
- 安装所需的库。
- 在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 libGL
find正确的库:
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开发人员。