2012-04-11 6 views
7

Von this tutorial.So verknüpfen Sie eine Bibliothek in der ndk-Anwendung

sehen Ich habe eine vorgefertigte statische Bibliothek als stackoverflow.a genannt und es hat stackoverflow.h

jetzt i die Funktion des statischen Bibliothek verwenden möchten, in

ndk_demo.c // dieses Tutorial hat diese Datei

dass für ndk_demo.c innen i

#include 'stackoverflow.h' 
hinzugefügt haben

bearbeiten

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 

Jetzt Application.mk

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

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

jetzt jni/lib/und 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) 

Jetzt von android-ndk-r7c Verzeichnis i laufen

make APP=ndk_demo 

es zeigt mir Fehler wie

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. 

warum das passiert i immer bin nicht?

wenn ich einen Kommentar

#include $(call all-subdir-makefiles) 

diese aus jni/Android.mk dann zeigt es Fehler folgende

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

Können Sie die Kompilierung und Link-Befehl posten, die aus der Make-Datei kommt? – ams

+0

duplizieren: http://stackoverflow.com/questions/6165813/using-my-own-prebuilt-shared-library-in-android-ndk-project – bitwise

+0

@Nick siehe bitte mein Update –

Antwort

5

wenn man bekommt "machen: * Keine Regel Ziel` something.c machen '", Es bedeutet nur, dass es die Datei nicht finden kann.

Ich bin ein wenig verwirrt, warum Sie Ihr Projekt so organisiert habe, aber wenn ich das Projekt bauen würde, würde ich es tun, wie folgt:

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

Dann würde ich verwenden Sie die folgende Make-Datei:

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) 

Und der folgende:

Anwendung.mk:

APP_MODULES := ndk_demo 
APP_PLATFORM := android-8 

Dann endlich, würde ich in das Verzeichnis (ndk_demo) und laufen NDK-build navigieren.

ndk-build ist androids Build-Tool. Du solltest es benutzen. Es kann unter:

(AndroidSDK)/(NDK)/ndk-build 

, wenn Sie Windows verwenden, müssen Sie entweder den vollständigen Pfad des NDK-build in die Konsole, oder fügen Sie eine Umgebungsvariable, um Ihr System zu geben, bevor Sie versuchen, um sie auszuführen.

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

Verwandte Themen