J'essaie de créer une bibliothèque partagée qui lie à une autre bibliothèque partagée.android ndk UnsatisfiedLinkError lors de l'utilisation d'une bibliothèque partagée prédéfinie
Voici mon module 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)
j'ai aussi la bibliothèque partagée préconstruits dans le répertoire ./lib avec son propre fichier 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)
Le SightCore- fichier source jni.cpp est l'interface jni à la bibliothèque partagée et est chargé en utilisant la commande
System.loadLibrary("SightCore-jni");
Pendant la processus ndk-build je reçois pas de compilation ou de liaison erreurs. Lorsque j'essaie d'exécuter l'application et d'accéder à l'une des méthodes natives, j'obtiens UnsatsfiedLinkError. J'ai remarqué que si désactiver les références à SightAPI dans mon code jni et mettre une faute de frappe à la ligne LOCAL_STATIC_LIBRARIES: = SightAPI, La construction est réussie et il n'y a pas UnsatisfiedLinkError.
Cela signifie que le code JNI J'est bon (je suis en fait que c'est ok ...)
Ainsi, l'observation est la suivante:
Si je compile la bibliothèque partagée avec le préconstruit bibliothèque partagée J'ai un corrompu fichier .so.
Si je compilez le même projet NDK sans lien vers le préconstruit bibliothèque partagée il n'y a pas de problème chargement de la bibliothèque partagée du côté java.
S'il vous plaît aidez-moi si vous le pouvez.
Merci à l'avance,
Ita
Quel message d'erreur voyez-vous dans logcat? Devrait être un message au-dessus de l'exception UnsatisfiedLinkError, probablement avec la sortie de dlopen(). Aussi, quelle version d'Android utilisez-vous? – fadden
Comment puis-je lier ma bibliothèque partagée au projet Android NDK Pouvez-vous s'il vous plaît Expliquez-moi – user1089679