Не вдалося завантажити 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

Крім того, емулятор працює дуже повільно. Як я можу вирішити цю проблему?

Відповіді:


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 і не плутається з основними системними каталогами.


5
Це в поєднанні з командою libo "apt-get" є найчистішим рішенням тут.
Дейв Кемерон,

Якщо у вас ще немає libGL.so.1, можливо, вам доведеться використовувати рішення за допомогою libo, але це найчистіше місце для зв’язування файлу. Не потрібно вставляти 32 біти в 64-бітні бібліотеки ....
Аякс

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

Я використовую Ubuntu 12.04 64-bit. Використовуючи наступну команду для вирішення проблеми

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

Примітка : Це стосується лише тих, хто використовує графічні драйвери AMD / ATI.


1
Це спрацювало і у мене, я думаю, це працює лише для карток ATI. Це технічно помилково, оскільки воно символічно посилає 32-бітну спільну бібліотеку в (64-бітну) / lib / директорію, але схоже, що емулятор Android шукатиме лише цю бібліотеку.
Alex Pretzlav

3
Я б рекомендував виконати пошук файлів для libGL.so та скорегувати команду посилання залежно від розташування. Моє
опинилося за

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

1
те саме стосується 12.10
logcat 03

Те саме для Linux Mint
Сефі,

Працює з 13.04. Зверніть увагу, що якщо ви вставите символічне посилання в каталог tools / lib, його доведеться видалити знову.
Персеїди

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. так що ви можете запустити: sudo apt-get install libgl1-mesa-dev

Однак це не вирішило проблему для мене. Насправді це, мабуть, зіпсувало мою систему.


Перевірено за допомогою 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 встановлено (навіть якщо у вас є файл x64 SO). Тоді зробіть:

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

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. Тож я насправді не знаю, що роблю….


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

3

Я використовую Linux Mint 14 - 64 біт, і для мене це спрацювало :):

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

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 локально, що може спричинити проблеми з вашими справжніми відеодрайверами.


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.
Yermo Lamers

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) Ви повинні створити символічне посилання

а) Використовуйте 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" "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 хвилина очікування). Якщо запустити емулятор з IDE Eclipse , то емулятор виконує програмну емуляцію (графічний процесор вимкнений) і запустив 1 хв. 30 ... Це набагато повільніше, ніж використання карток Intel або Nvidia !!!
  • verbose - параметр, який використовується для відображення додаткової діагностики
  • optirun- це команда використовувати Nvidia на Джмелі. Якщо у вас немає Джмеля, не використовуйте його!
  • avd - це віртуальний пристрій
  • gpu on скористатися графічною картою

1

Помилка OSEr: 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у вас є /usr/libабо /usr/lib64; він може бути викликаний libGL.so.1або замість цього іншим способом, або розміщений в іншому каталозі, залежно від відеодрайверів.

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


1

У мене була та ж проблема. Але в моєму випадку я вирішив це іншим (я думаю, краще) способом.

У моїй ситуації (Lubuntu 13.10) було достатньо просто також встановити бібліотеку libgl1-mesa-devчерез диспетчер Synaptic Package ( libgl1-mesa-driбібліотека була встановлена ​​за замовчуванням, коли було налаштовано дистрибутив Lubuntuu).

Це вирішує всі клопоти з перенесенням посилань з одного файлу на інший, а також запобігає забрудненню вашої системи:

  • Як ви дізнаєтесь через кілька місяців (або років), які спеціальні посилання ви ввели, щоб підтримувати роботу системи?
  • А як щодо майбутніх оновлень, якщо ви почнете робити ці речі самостійно? Чи буде щось зламане / не оновлене через "ручне втручання"?

Якщо ви використовуєте "системний механізм", це все зроблено за вас. І правильно зроблено. Ось чому ці інструменти існують насамперед.

Кращі rgds,


Щойно побачив, що @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

0

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

EDIT: Це зупиняє повідомлення про помилки, але емулятор для мене все ще повільний.


Так, емулятор і для мене неймовірно повільний.
Ігор Ганапольський

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 /

~ $ 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


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

Це воно!


0

У мене виникла ця проблема, оскільки я поставив прапорець "Використовувати хост GPU" під час створення мого AVD. Я спробував, не вибравши цю опцію, і я зміг успішно запустити емулятор. Це прийнятно для моїх цілей тестування, але якщо використання хост-графічного процесора важливо, ви, мабуть, захочете спробувати деякі інші рішення тут.



-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

Це працювало для мене на Ubuntu 11.10 32-bit. Я встановив libgl1-mesa-dev, і більше не було повідомлення про помилку під час запуску emultor. Мені не потрібно було виконувати жодне зв’язування, але, можливо, це знадобиться на 64-розрядному?
Кетрін Рікс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.