82

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

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

4

26 回答 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 并且不会与核心系统目录混淆。

于 2012-09-27T12:19:13.553 回答
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)

于 2012-07-23T10:26:14.070 回答
32

I am using Ubuntu 12.04 64-bit. Using the following command to solve the problem

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

Note: This is applicable only to those who use the AMD/ATI graphic drivers.

于 2012-07-10T07:15:02.213 回答
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
于 2012-10-12T05:54:35.540 回答
14

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

    sudo apt-get install libgl1-mesa-dev

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

安装 32 位版本无法正常工作。

于 2013-01-30T12:26:21.327 回答
6

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

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

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

于 2012-07-05T08:00:26.473 回答
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
于 2013-01-18T17:44:05.017 回答
4

我想我做对了,没有警告,也没有缓慢……不过,这可能不适用于专有驱动程序。

确保已安装 libgl1-mesa-glx:i386(即使您有 x64 SO 文件)。然后做:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
于 2012-07-11T16:15:40.107 回答
3

英伟达擎天柱:

在双显卡(英特尔和英伟达)上运行,我使用了以下内容:

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

于 2012-11-28T18:32:43.523 回答
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

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

于 2012-08-22T03:57:10.760 回答
3

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

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev
于 2013-07-17T02:06:49.047 回答
2

在 64 位的 Ubuntu 上,

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
于 2014-07-27T06:58:47.920 回答
2

要使其在64 位Ubuntu 12.10 (Quantal 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 位库!

现在启动模拟器 我的系统是擎天柱,我已经安装了大黄蜂。我可以使用“英特尔开源技术中心”“Mesa DRI Intel(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 已关闭)并需要 1 分钟 30 分钟才能启动......这比使用 Intel 或 Nvidia 卡要慢得多!!!
  • verbose是用于显示更多诊断的参数
  • optirun是在 Bumblebee 上使用 Nvidia 的命令。如果您没有 Bumblebee,请不要使用它!
  • avd是一个虚拟设备
  • gpu on使用图形卡
于 2013-01-13T20:40:37.917 回答
2

On Ubuntu 12.04 64-bit, GNOME 3.4, I first referred to http://developer.android.com/sdk/installing/index.html and installed ia32-lib, which will generate /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0

Then I run the below command and solved this problem:

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

This is slightly different from gridstation's answer.

I guess there's no need to install the Mesa driver locally, which may cause issues with your real video drivers.

于 2012-10-18T12:12:51.620 回答
1

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

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
于 2012-08-27T00:27:11.660 回答
1

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

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

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

  • 几个月(或几年)之后,您如何知道您放置了哪些专用链接来保持系统运行?
  • 如果您自己开始做这些事情,那么未来的更新呢?是否会因“人工干预”而损坏/不更新?

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

最好的rgds,

于 2013-12-31T10:13:59.097 回答
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/libor /usr/lib64; 根据视频驱动程序,它可能会被调用libGL.so.1或其他名称,或者位于另一个目录中。

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

于 2012-07-04T18:23:08.387 回答
0

这对我有用:

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

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

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server
于 2012-07-07T03:41:38.907 回答
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

于 2013-03-18T11:01:29.293 回答
0

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

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

于 2012-07-06T15:51:45.103 回答
0

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

于 2014-08-21T15:15:10.923 回答
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

而已!

于 2014-07-14T10:06:31.663 回答
0

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

于 2012-07-16T06:14:59.473 回答
0

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

ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 opt/android/tools/lib/libGL.so
于 2013-12-10T03:53:28.580 回答
-1

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

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

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

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

于 2012-08-31T14:55:25.970 回答
-2

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

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

于 2012-07-04T22:16:52.543 回答