Dalvik está buscando el archivo .so con extensión '.0' – ¿por qué?
He comenzado a desarrollar una aplicación Android muy simple que consta de tres partes:
- La aplicación Java en sí
- Una biblioteca compartida pre-construida (lo llamaremos
libfoo
) - Otra biblioteca compartida que utiliza la biblioteca pre-construida (lo llamaremos
libfoowrapper
)
El sistema de archivos se parece a esto:
- Cómo pasar un mapa de bits de Java a C ++ con JNI en Android Development
- Redireccionamiento de STDIN y STDOUT del programa C en Android
- Java.lang.UnsatisfiedLinkError: No se ha encontrado ninguna implementación para Boolean
- ¿Cómo puedo copiar mis bibliotecas .so en el dispositivo Android?
- Error de segmentación en la biblioteca nativa cuando se ejecuta bajo Android antes de 4.0.3
jni Android.mk libfoo.so foowrapper.c
El archivo Android.mk
contiene los siguientes contenidos:
LOCAL_PATH := $(call my-dir) #============================== include $(CLEAR_VARS) LOCAL_MODULE := foo-prebuilt LOCAL_SRC_FILES := libfoo.so include $(PREBUILT_SHARED_LIBRARY) #========================= include $(CLEAR_VARS) LOCAL_MODULE := foowrapper LOCAL_SRC_FILES := foowrapper.c LOCAL_SHARED_LIBRARIES := foo-prebuilt include $(BUILD_SHARED_LIBRARY)
Cuando construyo la aplicación en Eclipse, las cosas parecen funcionar bien, no se reportan errores. Sin embargo, cuando subo la aplicación a mi Samsung Discover (con Android 4.0.4), obtengo el siguiente error en el registro:
03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 102 could not load needed library 'libfoo.so.0' for 'libfoowrapper.so' (load_library[1091]: Library 'libfoo.so.0' not found)
¿Por qué el Dalvik busca un archivo .so.0
lugar de un archivo .so
? ¿Qué cambios debo realizar en mi aplicación para eliminar este error?
- ¿Qué es "jobject this" en JNI y para qué se utiliza?
- ¿Por qué algunos teléfonos Android hacen que nuestra aplicación lance un java.lang.UnsatisfiedLinkError?
- Enviar un parámetro android.content.Context a una función con JNI
- Rendimiento de Android NDK sobre el código Java habitual
- No se puede iniciar cygpath en android
- Android y JNI cómo pasar una matriz de datos Byte a JNI y recuperar Byte
- JNI de Android no encuentra archivos de encabezado de biblioteca estándar de C ++
- Androide applicatin no puede encontrar la biblioteca jni cuando se instala como aplicación del sistema
Al menos en el mundo de Linux, cada biblioteca compartida tiene un nombre especial llamado soname
. El soname tiene el prefijo lib
, el nombre de la biblioteca, la frase .so
, seguido por un punto y un número de versión que se incrementa cada vez que cambia la interfaz (como una excepción especial, las bibliotecas C de nivel más bajo no empiezan con lib
). Un soname completamente calificado incluye como prefijo el directorio en el que está; En un sistema de trabajo un soname completamente cualificado es simplemente un enlace simbólico al real name
la biblioteca compartida.
Cada biblioteca compartida también tiene un real name
, que es el nombre de archivo que contiene el código de biblioteca real. El nombre real agrega al sonido un período, un número menor, otro período y el número de la versión. El último período y el número de versión son opcionales. El número menor y el número de versión admiten el control de configuración al permitirle saber exactamente qué versión (es) de la biblioteca está instalada. Tenga en cuenta que estos números pueden no ser los mismos que los números utilizados para describir la biblioteca en la documentación, aunque eso facilita las cosas.
Referencia: Linux Standard Base
Edit: Parece que este no es un problema raro, no han visto ninguna solución real a ella, pero tal vez esto le ayudará a empezar a encontrar algo que funcione para usted.
Problema con LOCAL_SRC_FILES al utilizar PREBUILT_SHARED_LIBRARY https://groups.google.com/forum/#!topic/android-ndk/_UhNpRJlA1k
Creación de bibliotecas compartidas no versionadas para android http://www.opengis.ch/2011/11/23/creating-non-versioned-shared-libraries-for-android/
No se encontró la biblioteca 'libproj.so.0' https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/ai3tu0XXs88
- Cómo ocultar el BottomNavigationView debajo del teclado con el conjunto adjustResize
- Imagen personalizada en lugar de logotipo en ActionBar / ActionBarSherlock