Как связать любую библиотеку в приложении ndk

Из этого урока .

См. У меня есть одна предварительно построенная статическая библиотека, называемая stackoverflow.a и у нее есть stackoverflow.h

Теперь я хочу использовать функцию этой статической библиотеки в

ndk_demo.c // этот учебник имеет этот файл

Для этого внутри ndk_demo.c я добавил

 #include 'stackoverflow.h' 

редактировать

 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 

Теперь Application.mk

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

Теперь 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) 

Теперь 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) 

Теперь из android-ndk-r7c запустите

 make APP=ndk_demo 

Он показывает мне ошибку, как

 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. 

Почему это происходит, я не получаю?

Если я комментирую

 #include $(call all-subdir-makefiles) 

Это из jni/Android.mk после чего появляется следующая ошибка

 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 

Solutions Collecting From Web of "Как связать любую библиотеку в приложении ndk"

Когда вы получаете «make: * No rule to make target« something.c », это просто означает, что он не может найти файл.

Я немного смущен, почему вы так организовали свой проект, но если бы я собирался построить ваш проект, я бы сделал это следующим образом:

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

Тогда я бы использовал следующий 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) 

И следующее:

Application.mk:

 APP_MODULES := ndk_demo APP_PLATFORM := android-8 

Затем, наконец, я перейду в каталог (ndk_demo) и запустил ndk-build.

Ndk-build – это инструмент сборки android. Вы должны использовать его. Его можно найти по адресу:

 (AndroidSDK)/(NDK)/ndk-build 

Если вы используете окна, вам нужно либо ввести полный путь ndk-build в консоль, либо добавить переменную среды в свою систему, прежде чем пытаться ее запустить.

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