No se pudo cargar libGL.so en Android

82

Estoy usando Ubuntu 12.04 (Precise Pangolin) con Oracle JDK 7, y cuando estoy ejecutando el emulador de Android de Eclipse , aparece este error:

[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

Además, el emulador es muy lento. ¿Como puedó resolver esté problema?

php.khan
fuente

Respuestas:

82

Tengo el SDK de Android instalado en ~ / android-sdk-linux_x86, así que lo hice:

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

Esto resuelve errores al igual que lo hace el enlace a / usr / lib, pero no requiere root y no interfiere con los directorios centrales del sistema.

usuario1410657
fuente
5
Esto combinado con el comando "apt-get" de libo es la solución más limpia aquí.
Dave Cameron
Si aún no tiene libGL.so.1, es posible que deba usar la solución de libo, pero este es el lugar más limpio para vincular el archivo. No es necesario poner 32 bits en bibliotecas de 64 bits ....
Ajax
23
locate libGLal principio puede ayudar
yuan
2
Lo usé find / -name 'libGL.so.1'y lo ubiqué /usr/lib/x86_64-linux-gnuen debian jessie.
Justin Skiles
35

En Ubuntu 12.04 de 64 bits, hazlo así:

$ 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

Fuente: Instalación de los paquetes necesarios (Ubuntu 12.04)

libo
fuente
2
esto arruinó mi sistema
Alexandros
Esta respuesta en combinación con la respuesta: askubuntu.com/a/144194 para resolver dependencias (use aptitude para ubicar la dependencia y ver qué está causando el problema) y, finalmente, ejecutar un comando sudo apt-get install --reinstall gcc-4.7-multilibcomo encontré en la respuesta askubuntu.com/a/236114
Aleks
Tuve que hacer "sudo apt-get install libglapi-mesa" y luego "sudo apt-get install libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386" primero
stackOverlord
Creo que no tuve que instalar libGL para x86, fue suficiente para usar ./sdk/tools/emulator64-x86? (tenga en cuenta el '64')
jcarballo
1
Oh, hombre, publicar grandes líneas de entrega de aplicaciones sin ningún tipo de explicación o advertencia no es bueno.
Sebastian Mach
32

Estoy usando Ubuntu 12.04 de 64 bits. Usando el siguiente comando para resolver el problema

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

Nota : Esto es aplicable solo a aquellos que usan los controladores gráficos AMD / ATI.

user1289608
fuente
1
Esto también funcionó para mí, creo que esto solo funciona para tarjetas ATI. Esto es técnicamente incorrecto ya que enlaza simbólicamente la biblioteca compartida de 32 bits al directorio (64 bits) / lib /, pero parece que el emulador de Android solo buscará allí esta biblioteca.
Alex Pretzlav
3
Recomendaría hacer una búsqueda de archivos para libGL.so y ajustar el comando de enlace según la ubicación. El mío estaba en: / usr / lib / i386-linux-gnu / mesa
bytebender
2
El mío estaba en /usr/lib/x86_64-linux-gnu/mesa/libGL.so, pero causaba un error si intentaba ejecutarlo porque quería una biblioteca de 32 bits y proporcioné una de 64 bits
Ben McCann
32

Para Ubuntu 12.04 LTS de 32 bits, esto funcionó:

sudo apt-get install libgl1-mesa-dev

Ninguno de los siguientes funcionó:

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
Dragón de madera
fuente
1
lo mismo ocurre con 12.10
logcat
Lo mismo aquí para Linux Mint
Sephy
Funciona con 13.04. Tenga en cuenta que si coloca un enlace simbólico en el directorio tools / lib, debe eliminarlo nuevamente.
Perseidas
2
El comando apt-get también funcionó en Ubuntu 13.04 x64, sin necesidad de enlace simbólico.
Jason McVetta
14

Lo que funciona para mí (ubuntu 12.04 64bit) fue simplemente ejecutar:

    sudo apt-get install libgl1-mesa-dev

encontre eso libGL.so existe en el directorio/usr/lib/x86_64-linux-gnu/

La instalación de la versión de 32 bits no funcionaba.

Frank AFRIAT
fuente
6

En Ubuntu 12.04 de 64 bits, no hay / usr / lib64. Es solo / usr / lib. Además, en mi máquina, libGL.so no está presente. En cambio, el archivo es libGLEW.so

Para instalar /usr/lib/LibGL.so puede ejecutar: sudo apt-get install libgl1-mesa-dev

Sin embargo, no me resolvió el problema. De hecho, probablemente arruinó mi sistema.

inder
fuente
Comprobado con Synaptic, libgl1-mesa-dev instala libGL.so en
/usr/lib/x86_64-linux-gnu/libGL.so
1
GLEW es una biblioteca diferente, OpenGL Extension Wrangler . No es un "lugar", es algo que los programas pueden usar además de libGL.
Wyzard
4

Esto funcionó para mí en Ubuntu 12.10 de 64 bits y el paquete ADT:

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 ~/adt-bundle-linux-x86_64/sdk/tools/lib/libGL.so

Si no /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1acaba de instalarlibgl1-mesa-glx

sudo apt-get install libgl1-mesa-glx
marcantonio
fuente
4

Creo que lo hice bien, sin advertencias ni lentitud ... Sin embargo, esto podría no funcionar con controladores propietarios.

Asegúrese de que libgl1-mesa-glx: i386 esté instalado (incluso si tiene un archivo SO x64). Entonces hazlo:

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

NVidia Optimus:

Ejecutando en gráficos duales (intel y nvidia), usé lo siguiente:

  1. Instale Bumblebee (consulte: https://wiki.ubuntu.com/Bumblebee#Installation )
  2. Instale la lib.
  3. Ejecute el emulador en la tarjeta discreta nvidia.

Esto debería funcionar:

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

Siempre que desee ejecutar el emulador, simplemente use optirun:

optirun emulator @<avd_name>

Debo advertir que solo instalé Linux ayer. Así que realmente no sé lo que estoy haciendo….

user1860888
fuente
3

Refiriéndome a http://developer.android.com/sdk/installing/index.html , instalé ia32-libs e hice:

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

Eso es todo lo que hice para resolver este problema.

estación de cuadrícula
fuente
Agradable, pero tuve que usar /usr/lib/x86_64-linux-gnu/mesaen su lugar
Joril
3

Utilizo Linux Mint 14 - 64 bit y para mí funcionó :):

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev
jAbreu
fuente
2

En Ubuntu 12.04 64-bit, GNOME 3.4, primero me referí a http://developer.android.com/sdk/installing/index.html e instalé ia32-lib, que generará / usr / lib / i386-linux-gnu /mesa/libGL.so.1.2.0

Luego ejecuto el siguiente comando y resolví este problema:

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

Esto es ligeramente diferente de la respuesta de gridstation.

Supongo que no es necesario instalar el controlador Mesa localmente, lo que puede causar problemas con sus controladores de video reales.

Kevin Zhu
fuente
2

En Ubuntu de 64 bits,

1. Compruebe 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. Cree un enlace simbólico donde esté instalado el SDK

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so
prayagupd
fuente
Puedo confirmar que esto resuelve el problema en Ubuntu de 64 bits.
Yermo Lamers
2

Para que funcione en Ubuntu 12.10 (Quantal Quetzal) de 64 bits, debe hacer dos cosas:

1) Tienes que inicializar LD_LIBRARY_PATH

Ejemplo:

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

Comentarios: cambia la ruta a tu ubicación

2) Tienes que crear un enlace simbólico

a) Utilice locate libGLpara encontrar la biblioteca correcta:

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) Crea el enlace suave

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

Comentarios: use una biblioteca de 64 bits en un sistema operativo de 64 bits.

Ahora inicie el emulador Mi sistema es Optimus y he instalado Bumblebee . Puedo utilizar "Intel Open Source Technology Center" "Mesa DRI Intel (R) Ironlake Mobile" "2.1 Mesa 9.0" o "NVIDIA Corporation" "GeForce GT 330M / PCIe / SSE2" "3.3.0 NVIDIA 304.43".

a) Intel

/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

Comentarios:

  • No vi ninguna diferencia entre las tarjetas Intel y Nvidia ... Ciertamente es porque el emulador no es intensivo en GPU .
  • En mi sistema, un Intel Core i5, tardó casi 1 minuto en iniciar el emulador ... Por favor, tenga paciencia ... Encuentro el emulador bastante rápido después de que se carga (el 1 minuto de espera). Si inicia el emulador desde el Eclipse IDE , entonces el emulador hace una emulación de software (la GPU está apagada) y tardó 1 min 30 en comenzar ... ¡Es mucho más lento que usar las tarjetas Intel o Nvidia!
  • verbose es el parámetro a utilizar para mostrar más diagnósticos
  • optirunes el comando para hacer uso de Nvidia en Bumblebee. Si no tienes Bumblebee, ¡no lo uses!
  • avd es un dispositivo virtual
  • gpu on para hacer uso de la tarjeta gráfica
Rudy Vissers
fuente
1

OSError: libGL.so: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio

Puede aparecer en los sistemas Linux cuando intenta iniciar VNL por primera vez. Para solucionarlo, cree (como administrador) un nuevo enlace en /usr/lib:

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

Si tiene un Linux de 64 bits, use /usr/lib64 instead.

Primero verifique que realmente tiene libGL.so.1.2en /usr/libo /usr/lib64; podría ser llamado libGL.so.1o algo más en su lugar, o ubicado en otro directorio, dependiendo de los controladores de video.

Puede utilizar localizar libGLpara encontrar el archivo correcto al que enlazar.

Dipali
fuente
1

Tuve el mismo problema. Pero en mi caso lo resolví de otra manera (creo que mejor).

En mi situación (Lubuntu 13.10), fue suficiente simplemente instalar también la biblioteca a libgl1-mesa-devtravés del administrador de paquetes Synaptic (la libgl1-mesa-dribiblioteca ya estaba instalada por defecto cuando se configuró la distribución de Lubuntuu).

Eso resuelve toda la molestia de colocar enlaces de un archivo a otro y también evita la contaminación de su sistema:

  • ¿Cómo sabrá después de varios meses (o años) qué enlaces dedicados ha puesto para mantener el sistema en funcionamiento?
  • ¿Qué pasa con las actualizaciones futuras, si comienza a hacer esas cosas usted mismo? ¿Algo se romperá o no se actualizará debido a una "intervención manual"?

Si utiliza el "mecanismo del sistema", todo estará listo para usted. Y hecho correctamente. Es por eso que esas herramientas están ahí en primer lugar.

Mejores rgds,

GeertVc
fuente
Acabo de ver que @Tanyasipeti hizo lo mismo a través de apt-get. Pero en mi caso, resolvió el problema por completo. Tengo el emulador en funcionamiento.
GeertVc
¡Lo descubrí yo mismo para 13.10 y quería agregar algo similar como respuesta!
Veger
1

De manera similar a user1289608, pude hacer un enlace simbólico desde una instalación existente de Mesa:

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

Estoy usando Ubuntu 12.04 de 64 bits. Vincular /usr/lib64/libGLC.so.0a /usr/lib64/libGL.soparece resolver el problema.

EDITAR: detiene los mensajes de error, pero el emulador todavía es lento para mí.

glen3b
fuente
Sí, el emulador también es increíblemente lento para mí.
IgorGanapolsky
0

Esto funcionó para mí:

Reinicie el adb desde el DDMS:
En Eclipse: Ventana> Abrir perspectiva ...> Otro> DDMS. Seleccione el emulador en el panel del lado izquierdo y seleccione "Reiniciar adb"

También puede reiniciar el servidor adb desde la ventana del terminal.

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server
anirus
fuente
0

Encontré la carpeta para libGL con el comando "localizar"

Resultó estar en / usr / lib / i386-linux-gnu /

~ $ Localizar 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
fuente
0

Para mi instalación de Debian 7 'Wheezy' utilicé el siguiente comando:

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

¡Eso es!

usuario1090003
fuente
0

Tuve este problema porque había marcado "Usar GPU de host" al crear mi AVD. Lo probé con esa opción sin marcar y pude iniciar con éxito el emulador. Esto es aceptable para mis propósitos de prueba, pero si usar la GPU del host es importante, probablemente querrá probar algunas de las otras soluciones aquí.

Ben Jakuben
fuente
-1

Resolví este problema reinstalando libgl1, tanto las bibliotecas de 64 como de 32 bits:

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

Antecedentes: anteriormente cambié del controlador radeon gratuito a fglrx. Supongo que esto de alguna manera arruinó mi libgl1, porque fglrx viene con su propia versión.

Además, creo que las otras soluciones proporcionadas aquí son posiblemente peligrosas, porque es incorrecto vincular bibliotecas compartidas de 32 bits en el directorio (64 bits) / lib /.

dmoebius
fuente
-2

Compruebe si tiene libgl1-mesa-*paquetes instalados. Si es así, instale el libgl1-mesa-devpaquete para obtener los objetos compartidos sin versión .

No debería tener que hacer esto, es un error del equipo de Android. Dales un respiro, solo son desarrolladores de Java.

Ryan
fuente
ya tengo mesa-libGL-dev en mi sistema, pero todavía tengo el error
php.khan
Esto funcionó para mí en Ubuntu 11.10 de 32 bits. Instalé libgl1-mesa-dev y ya no había un mensaje de error al iniciar el emultor. No necesitaba realizar ningún enlace, pero tal vez esto sea necesario en 64 bits.
Katherine Rix