Cómo vincular cualquier biblioteca en la aplicación ndk

De este tutorial

veo que tengo una biblioteca estática preconstruida llamada stackoverflow.a y tiene stackoverflow.h

ahora quiero usar la función de esa biblioteca estática en

ndk_demo.c // ese tutorial tiene este archivo

para eso dentro de ndk_demo.c he agregado

 #include 'stackoverflow.h' 

Editar

 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 

Ahora Application.mk

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

Ahora 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) 

ahora 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) 

Ahora desde el directorio android-ndk-r7c corro

 make APP=ndk_demo 

me muestra un error como

 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. 

¿Por qué esto no está sucediendo?

si yo comento

 #include $(call all-subdir-makefiles) 

esto desde jni/Android.mk muestra el siguiente error

 Android NDK: Building for application 'ndk_demo' Compile 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 

cuando obtienes “make: * No rule to target” something.c “”, solo significa que no puede encontrar el archivo.

Estoy un poco confundido sobre por qué organizaste tu proyecto de esa manera, pero si fuera a construir tu proyecto, lo haría de la siguiente manera:

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

Entonces usaría el siguiente archivo MAKE:

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) 

Y lo siguiente:

Application.mk:

 APP_MODULES := ndk_demo APP_PLATFORM := android-8 

Entonces, finalmente, navegaría al directorio (ndk_demo) y ejecutaría ndk-build.

ndk-build es la herramienta de comstackción de Android. Deberías usarlo Se puede encontrar en:

 (AndroidSDK)/(NDK)/ndk-build 

si está utilizando Windows, tendrá que escribir la ruta completa de ndk-build en la consola, o agregar una variable de entorno a su sistema antes de intentar ejecutarlo.

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