Comment lier n’importe quelle bibliothèque dans l’application ndk

De ce tutoriel .

vois que j’ai une bibliothèque statique préconstruite nommée stackoverflow.a et qu’elle a stackoverflow.h

Maintenant, je veux utiliser la fonction de cette bibliothèque statique

ndk_demo.c // ce tutoriel a ce fichier

pour cela à l’intérieur de ndk_demo.c j’ai ajouté

 #include 'stackoverflow.h' 

modifier

 inside `android-ndk-r7c` | apps | ndk_demo | ----------------- | | project Application.mk | -------------------- | | all other | folder jni | ------------------------------------------------------------------- | | | | | ndk_demo.c stackoverflow.h lib com_marakana Android.mk | _NativeLib.h | -------------------- | | Android.mk libstackoverflow.a 

Maintenant Application.mk

 APP_PROJECT_PATH := $(call my-dir)/project APP_MODULES := ndk_demo stackover 

Maintenant jni / Android.mk

 include $(call all-subdir-makefiles) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ndk_demo LOCAL_SRC_FILES := ndk_demo.c LOCAL_STATIC_LIBRARIES := stackover include $(BUILD_SHARED_LIBRARY) 

maintenant jni / lib / Android.mk

  LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := stackover LOCAL_SRC_FILES := libstackoverflow.a include $(PREBUILT_STATIC_LIBRARY) LOCAL_PATH := $(call my-dir) 

Maintenant, à partir android-ndk-r7c , je lance

 make APP=ndk_demo 

il me montre une erreur comme

 Android NDK: Building for application 'ndk_demo' make: *** No rule to make target `build/core/ndk_demo.c', needed by `out/apps/ndk_demo/armeabi/objs/ndk_demo/ndk_demo.o'. Stop. 

pourquoi est-ce que je ne comprends pas

si je commente

 #include $(call all-subdir-makefiles) 

ceci de jni/Android.mk alors il montre l’erreur suivante

 Android NDK: Building for application 'ndk_demo' Comstack thumb : ndk_demo <= ndk_demo.c SharedLibrary : libndk_demo.so ./out/apps/ndk_demo/armeabi/objs/ndk_demo/ndk_demo.o: In function `Java_com_marakana_NativeLib_hello': /home/jeegar/android-ndk-r7c/apps/ndk_demo/project/jni/ndk_demo.c:10: undefined reference to `stackoverflowInit' collect2: ld returned 1 exit status make: *** [out/apps/ndk_demo/armeabi/libndk_demo.so] Error 1 

quand vous obtenez “make: * Aucune règle pour créer la cible` quelque chose.c ‘”, cela signifie simplement qu’il ne peut pas trouver le fichier.

Je comprends un peu pourquoi vous avez organisé votre projet de cette façon, mais si je devais construire votre projet, je le ferais comme suit:

 (doesn't matter which directory) | -->(ndk_demo) -->-->(jni) -->-->-->Application.mk -->-->-->Android.mk -->-->-->com_marakana_NativeLib.h -->-->-->ndk_demo.c -->-->(stackoverflow) -->-->-->stackoverflow.h -->-->-->libstackoverflow.a 

Ensuite, j’utiliserais le makefile suivant:

Android.mk:

 LOCAL_PATH := $(call my-dir) ### include stackoverflow as a prebuilt lib ### include $(CLEAR_VARS) LOCAL_MODULE := stackoverflow-prebuilt LOCAL_SRC_FILES := ../stackoverflow/libstackoverflow.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../stackoverflow include $(PREBUILT_STATIC_LIBRARY) ### build your ndk lib ### include $(CLEAR_VARS) LOCAL_MODULE := ndk_demo LOCAL_C_INCLUDES := $(LOCAL_PATH) \ $(LOCAL_PATH)/../stackoverflow LOCAL_SRC_FILES := ndk_demo.c LOCAL_LDLIBS := -llog LOCAL_STATIC_LIBRARIES := stackoverflow-prebuilt include $(BUILD_SHARED_LIBRARY) 

Et les suivants:

Application.mk:

 APP_MODULES := ndk_demo APP_PLATFORM := android-8 

Enfin, je naviguerais vers le répertoire (ndk_demo) et lancer ndk-build.

NDK-build est l’outil de construction d’Android. Vous devriez l’utiliser. On peut le trouver à:

 (AndroidSDK)/(NDK)/ndk-build 

Si vous utilisez Windows, vous devrez soit saisir le chemin d’access complet de ndk-build dans la console, soit append une variable d’environnement à votre système avant d’essayer de l’exécuter.

http://www.windows7hacker.com/index.php/2010/05/how-to-addedit-environment-variables-in-windows-7/