2012-04-11 3 views
7

От this tutorial.Как соединить любую библиотеку в приложении 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/Библиотека/А roid.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 
+0

Вы можете разместить компилировать и компоновать команду, которая выходит из Makefile? – ams

+0

дубликат: http://stackoverflow.com/questions/6165813/using-my-own-prebuilt-shared-library-in-and-android-ndk-project – bitwise

+0

@ Ник, пожалуйста, см. Мое обновление –

ответ

5

когда вы получаете "сделать: * Нет правил, чтобы сделать целевой` 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 

Тогда я хотел бы использовать следующие Makefile:

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) 

И следующее:

Приложение.тк:

APP_MODULES := ndk_demo 
APP_PLATFORM := android-8 

Тогда, наконец, я хотел бы перейти к каталогу (ndk_demo) и запустить НДК-билд.

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

(AndroidSDK)/(NDK)/ndk-build 

если вы используете окна, вы должны либо ввести полный путь НДК-строить в консоль, или добавить переменную среды в вашей системе, прежде чем пытаться запустить его.

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

Смежные вопросы