Как связать любую библиотеку в приложении 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
теперь применение.МК
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := ndk_demo stackover
теперь jni / Android.МК
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.МК
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)
сейчас от я бегу!--18-->
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
1 ответов
когда вы получаете "сделать: * нет правила, чтобы что-то.с'", это просто означает, что он не может найти файл.
Я немного смущен, почему вы так организовали свой проект, но если бы я собирался построить ваш проект, я бы сделал это следующим образом:
(doesn't matter which directory)
|
-->(ndk_demo)
-->-->(jni)
-->-->-->Application.mk
-->-->-->Android.mk
-->-->-->com_marakana_NativeLib.h
-->-->-->ndk_demo.c
-->-->(stackoverflow)
-->-->-->stackoverflow.h
-->-->-->libstackoverflow.a
тогда я бы использовал следующий makefile:
Андроид.МК:
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)
и следующий:
Применение.МК:
APP_MODULES := ndk_demo
APP_PLATFORM := android-8
затем, наконец, я бы перейти к каталогу (ndk_demo) и запустить ndk-build.
ndk-build является инструментом сборки android. Вы должны использовать его. Его можно найти по адресу:
(AndroidSDK)/(NDK)/ndk-build
если вы используете windows, вам нужно будет либо ввести полный путь ndk-build в консоль, либо добавить переменную среды в систему перед запуском он.
http://www.windows7hacker.com/index.php/2010/05/how-to-addedit-environment-variables-in-windows-7/