Не удалось загрузить libGL.so на Android

82

Я использую Ubuntu 12.04 (Precise Pangolin) с Oracle JDK 7, и когда я запускаю эмулятор Android из Eclipse , он выдает эту ошибку:

[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

Также эмулятор очень медленный. Как я могу решить эту проблему?

php.khan
источник

Ответы:

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 и не мешает работе с основными системными каталогами.

user1410657
источник
5
В сочетании с командой libo "apt-get" это самое чистое решение.
Дэйв Кэмерон
Если у вас еще нет libGL.so.1, возможно, вам придется использовать решение от libo, но это самое чистое место для связывания файла. Не нужно ставить 32-битные в 64-битные библиотеки ....
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
это испортило мою систему
Александрос
Этот ответ в сочетании с ответом - askubuntu.com/a/144194 для решения зависимостей (используйте aptitude, чтобы найти зависимость и узнать, что вызывает проблему) и, в конечном итоге, запустить команду, sudo apt-get install --reinstall gcc-4.7-multilibкак я нашел в ответе askubuntu.com/a/236114
Алекс
Мне пришлось сначала выполнить «sudo apt-get install libglapi-mesa», а затем «sudo apt-get install libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386»
stackOverlord
Думаю, мне не пришлось устанавливать libGL для x86, достаточно было использовать ./sdk/tools/emulator64-x86? (обратите внимание на '64')
jcarballo
1
О боже, публиковать огромные строки рассылок приложений без каких-либо объяснений или предупреждений - это нехорошо.
Себастьян Мах
32

Я использую 64-разрядную версию Ubuntu 12.04. Используйте следующую команду для решения проблемы

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

Примечание . Это применимо только к тем, кто использует графические драйверы AMD / ATI.

user1289608
источник
1
Это сработало и у меня, я думаю, это работает только для карт ATI. Это технически неверно, поскольку он связывает 32-битную общую библиотеку в (64-битный) каталог / lib /, но похоже, что эмулятор Android будет искать только там эту библиотеку.
Alex Pretzlav
3
Я бы порекомендовал выполнить поиск файла libGL.so и настроить команду ссылки в зависимости от местоположения. Мой оказался по адресу: / usr / lib / i386-linux-gnu / mesa
bytebender
2
Мой был в /usr/lib/x86_64-linux-gnu/mesa/libGL.so, но это вызывало ошибку, если я пытался запустить, потому что ему нужна 32-битная библиотека, а я поставил 64-битную библиотеку
Бен Макканн,
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
Деревянный Дракон
источник
Работает с 13.04. Обратите внимание: если вы поместите символическую ссылку в каталог tools / lib, вам придется снова удалить ее.
Perseids
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

Однако для меня это не решило проблему. Фактически, это, вероятно, испортило мою систему.

Inder
источник
Проверено с помощью Synaptic, libgl1-mesa-dev устанавливает libGL.so в /usr/lib/x86_64-linux-gnu/libGL.so
sergio91pt
1
GLEW - это другая библиотека, OpenGL Extension 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 установлен (даже если у вас есть файл SO x64). Затем сделайте:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
sergio91pt
источник
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 только вчера. Так что я действительно не знаю, что делаю…

user1860888
источник
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

Это все, что я сделал, чтобы решить эту проблему.

сетка
источник
Хорошо, но мне пришлось использовать /usr/lib/x86_64-linux-gnu/mesaвместо этого
Joril 02
3

Я использую Linux Mint 14 - 64 бит, и у меня это сработало :):

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev
JAbreu
источник
2

В 64-разрядной версии Ubuntu 12.04 и 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

В 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
прайагупд
источник
Я могу подтвердить, что это решает проблему под Ubuntu 64bit.
Ермо Ламерс
2

Чтобы он работал на Ubuntu 12.10 64-битной версии (Quantal Quetzal), вам нужно сделать две вещи:

1) Вам необходимо инициализировать LD_LIBRARY_PATH

Пример:

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

Комментарии: изменить путь к вашему местоположению

2) Вам необходимо создать символическую ссылку

а) Используйте, 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

б) Создайте мягкую ссылку

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

Комментарии: используйте 64-битную библиотеку в 64-битной операционной системе!

Теперь запустите эмулятор. Моя система - Optimus , и я установил Bumblebee . Я могу использовать «Intel Open Source Technology Center», «Mesa DRI Intel (R) Ironlake Mobile», «2.1 Mesa 9.0» или «NVIDIA Corporation», «GeForce GT 330M / PCIe / SSE2», «3.3.0 NVIDIA 304.43».

а) Intel

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

б) Nvidia

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 ... Это, конечно, потому, что эмулятор не требует интенсивного использования графического процессора .
  • В моей системе Intel Core i5 для запуска эмулятора потребовалась почти 1 минута ... Пожалуйста, проявите терпение ... Я считаю, что эмулятор работает довольно быстро после его загрузки (1 минута ожидания). Если вы запускаете эмулятор из Eclipse IDE , то эмулятор выполняет программную эмуляцию (графический процессор выключен) и запускается за 1 мин 30 ... Это намного медленнее, чем при использовании карт Intel или Nvidia !!!
  • verbose параметр, используемый для отображения дополнительных диагностических данных
  • optirun- это команда для использования Nvidia в Bumblebee. Если у вас нет Bumblebee, не используйте его!
  • avd это виртуальное устройство
  • gpu on использовать графическую карту
Руди Виссерс
источник
1

OSError: libGL.so: невозможно открыть файл общих объектов: нет такого файла или каталога

Это может появиться в системах Linux, когда вы пытаетесь запустить VNL в первый раз. Чтобы решить эту проблему, создайте (как администратор) новую ссылку в /usr/lib:

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

Если у вас 64-битный Linux, используйте /usr/lib64 instead .

Сначала проверьте, действительно ли libGL.so.1.2у вас есть in /usr/libor /usr/lib64; это можно было бы назватьlibGL.so.1вместо этого или как-то еще или находиться в другом каталоге, в зависимости от видеодрайверов.

Вы можете использовать locate, libGLчтобы найти нужный файл, на который нужно создать ссылку.

Дипали
источник
1

Я была такая же проблема. Но в моем случае я решил это другим (думаю, лучшим) способом.

В моей ситуации (Lubuntu 13.10) было достаточно просто установить библиотеку libgl1-mesa-devчерез диспетчер пакетов Synaptic (libgl1-mesa-dri библиотека уже была установлена ​​по умолчанию, когда был установлен дистрибутив Lubuntuu).

Это решает все проблемы с размещением ссылок из одного файла в другой, а также предотвращает загрязнение вашей системы:

  • Как вы узнаете через несколько месяцев (или лет), какие выделенные ссылки вы разместили, чтобы система работала?
  • А как насчет будущих обновлений, если вы начнете делать это самостоятельно? Будет ли что-то ломаться / не обновляться из-за "ручного вмешательства"?

Если вы используете «системный механизм», все делается за вас. И правильно сделали. Вот почему эти инструменты существуют в первую очередь.

Лучшие rgds,

GeertVc
источник
Только что увидел, что @Tanyasipeti сделал то же самое через apt-get. Но в моем случае это полностью решило проблему. Я запустил эмулятор.
GeertVc
Я просто разобрался сам для 13.10 и хотел добавить что-то подобное в качестве ответа!
Veger
1

Как и в случае с user1289608, я смог сделать символьную ссылку из существующей установки Mesa:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
Kcstrom
источник
0

Я использую 64-разрядную версию Ubuntu 12.04. Ссылка /usr/lib64/libGLC.so.0на, /usr/lib64/libGL.soпохоже, решает проблему.

РЕДАКТИРОВАТЬ: он останавливает сообщения об ошибках, но эмулятор все еще работает медленно для меня.

glen3b
источник
Да, эмулятор для меня тоже невероятно медленный.
Игорь Ганапольский
0

Это сработало для меня:

Перезапустите adb из DDMS:
В Eclipse: Window> Open Perspective ...> Other> DDMS. Выберите эмулятор на левой боковой панели и выберите «Перезагрузить adb».

Вы также можете перезапустить сервер adb из окна терминала.

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server
антивирус
источник
0

Я нашел папку для 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

Cootje
источник
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

это оно!

user1090003
источник
0

У меня возникла эта проблема, потому что я поставил галочку «Использовать хост-процессор» при создании AVD. Я попробовал это сделать, сняв этот флажок, и смог успешно запустить эмулятор. Это приемлемо для моих целей тестирования, но если использование хост-GPU важно, вы, вероятно, захотите попробовать некоторые другие решения здесь.

Бен Якубен
источник
-1

Я решил эту проблему, переустановив libgl1, как 64-, так и 32-битные библиотеки:

$ 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 05
Это сработало для меня на 32-разрядной версии Ubuntu 11.10. Я установил libgl1-mesa-dev, и при запуске эмулятора больше не было сообщения об ошибке. Мне не нужно было выполнять связывание, но, может быть, это потребуется в 64-битной версии?
Кэтрин Рикс,