android ndk référence non définie à une méthode
Salut Désolé pour le long post, je suis en train de compiler des classes statiques à savoir jsmn.c,json.c et buf.c qui font partie de la jsmn librairie json, j'ai téléchargé à partir de https://github.com/alisdair/jsmn-example/downloads.
Je suis de la compilation de deux STATIC_LIBRARIES lib1 et json_librrary.lib1 a du code natif qui dépend de json_library.Ensuite, j'ai fais deux bibliothèques dans une bibliothèque partagée contenant
gnustl_static ET lib1
Mon dossier structure est comme suit
jni/lib1/ANdroid.mk
include $(CLEAR_VARS)
LOCAL_MODULE := json_library
LOCAL_SRC_FILES := /3rdParty/jsmn/json_library.a
LOCAL_SRC_FILES := /3rdParty/jsmn/jsmn.c /3rdParty/jsmn/buf.c /3rdParty/jsmn/log.c /3rdParty/jsmn/json.c
LOCAL_C_INCLUDES := /3rdParty/jsmn/jsmn.h /3rdParty/jsmn/buf.h /3rdParty/jsmn/log.h /3rdParty/jsmn/json.h
# Optional compiler flags.
LOCAL_LDLIBS = -lz -lm
LOCAL_CFLAGS = -Wall -pedantic -std=c99 -g
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
# Module Name
LOCAL_MODULE := lib1
LOCAL_STATIC_LIBRARIES := json_library
........
.......
......
include $(BUILD_STATIC_LIBRARY)
jni/Android.mk
# Here we give our module name
LOCAL_MODULE := lib2
# list the static modules included here!!!
LOCAL_STATIC_LIBRARIES := gnustl_static lib1
....
include $(BUILD_SHARED_LIBRARY)
jni/de l'Application.mk
APP_MODULES := lib2
# Optimization for release
APP_OPTM := release
#Targets
APP_ABI := armeabi-v7a armeabi
Donc à l'intérieur de la lib1 j'ai la classe qui appelle une méthode de la librairie json nommé json_tokenise
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <jsmn/jsmn.h>
#include <jsmn/json.h>
#include <jsmn/buf.h>
jsmntok_t *tokens=json_tokenise((char *)data);
typedef enum {
START,
WRAPPER,
MESSAGE,
ROUTE,
OBJECT,
ARRAY,
SKIP,
STOP
}parse_state;
J'obtiens l'erreur suivante
undefined reference to `json_tokenise(char*)'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/lib2.so] Error 1
**** Build Finished ****
Quand j'ai un coup d'oeil à l'intérieur de [l'obj/local/armeabi-v7a/je peux voir
libjson_library.un liblib1.un libgnustl_static.une sont arriver généré pour le armabi-v7 et il ne parvient pas à générer lib2 à cause de l'erreur.
S'il vous plaît aider ou me guider où je vais mal, j'ai passé deux jours et je suis nouveau sur le NDK.
OriginalL'auteur luckysing_noobster | 2012-10-26
Vous devez vous connecter pour publier un commentaire.
Vous devez corriger votre
jni/lib1/Android.mk
fichier:Si vous avez encore des problèmes après cela, s'il vous plaît exécuter
ndk-build
avec le paramètreV=1
sur la ligne de commande et après la sortie complète de cette construction et le contenu intégral de tous vosAndroid.mk
fichiers.OriginalL'auteur Alex Cohn
J'ai été confrontée au même problème. Le
json_library.a
devrait être inclus dans le paquetage statique module de la bibliothèque. Et qui doivent être compilés pour la plate-forme désirée.Il n'est pas nécessaire d'inclure chaque fichier séparément.
Enfin, il est nécessaire de préciser que
json_library
module dépend dejson_core
(prêtes à l'emploi de la bibliothèque) .De cette façon, l'éditeur de liens ne sait où trouver toutes les définitions de méthodes pour chaque module.
OriginalL'auteur shuva