Estoy intentando crear una biblioteca compartida que se vincule a otra biblioteca compartida.anddroid ndk UnsatisfiedLinkError al usar una biblioteca compartida preconstruida
Aquí es mi módulo principal Android.mk:
TOP_LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib/include
LOCAL_MODULE := SightCore-jni
LOCAL_SRC_FILES := SightDemo.cpp SightCore-jni.cpp
LOCAL_SHARED_LIBRARIES := SightAPI
LOCAL_LDLIBS = -llog
include $(BUILD_SHARED_LIBRARY)
que también tienen la biblioteca compartida en el directorio creado previamente ./lib con su propio archivo Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SightAPI
LOCAL_SRC_FILES := libSightAPI.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
El SightCore- El archivo fuente jni.cpp es la interfaz jni de la biblioteca compartida y se carga con el comando
System.loadLibrary("SightCore-jni");
Durante la Proceso ndk-build Me sale sin compilación ni enlaces errores. Cuando intento ejecutar la aplicación y acceder a uno de los métodos nativos obtengo el UnsatsfiedLinkError. Observé que si deshabilitaba las referencias a SightAPI en mi código jni y ponía un error tipográfico en la línea LOCAL_STATIC_LIBRARIES: = SightAPI, la compilación se realizó correctamente y no hay UnsatisfiedLinkError.
Esto significa que el código JNI que tengo es bueno (en realidad estoy seguro de que está bien ...)
Así que la observación es la siguiente:
Si puedo compilar la biblioteca compartida con el pre-compilados biblioteca compartida obtengo un archivo corrupto .so.
Si puedo compilar el mismo proyecto NDK sin vincular a la biblioteca compartida de pre-compilados hay ningún problema cargar la biblioteca compartida desde el lado de Java.
Por favor, ayúdenme si puede.
Gracias de antemano,
Ita
¿Qué mensaje de error ve en logcat? Debería haber un mensaje encima de la excepción UnsatisfiedLinkError, probablemente con salida de dlopen(). Además, ¿qué versión de Android estás usando? – fadden
¿Cómo puedo vincular mi biblioteca compartida al proyecto NDK de Android? ¿Puede explicarme – user1089679