2012-04-11 18 views
7

Da this tutorial.Come collegare qualsiasi libreria nell'applicazione ndk

vedere ho una libreria statica pre-costruito nominato stackoverflow.a ed ha stackoverflow.h

ora voglio usare la funzione di quella libreria statica in

ndk_demo.c // che tutorial è questo file

per che dentro ndk_demo.c ho aggiunto

#include 'stackoverflow.h' 

Modifica

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 

Ora Application.mk

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

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

ora jni/lib/E 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) 

Ora da android-ndk-r7c directory ho eseguito

make APP=ndk_demo 

mi mostra errore come

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. 

perché questo accada non ricevo?

se io commento

#include $(call all-subdir-makefiles) 

questo da jni/Android.mk poi mostra errore

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

potete inserire il comando di compilazione e link che esce makefile? – ams

+0

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

+0

@Nick si prega di vedere il mio aggiornamento –

risposta

5

quando si arriva "make: * Nessuna regola per fare bersaglio` something.c '" dopo, significa solo che non riesce a trovare il file.

Sono un po 'confuso perché avete organizzato il vostro progetto del genere, ma se stavo andando a costruire il vostro progetto, lo farei come segue:

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

quindi vorrei utilizzare il seguente 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) 

E la seguente:

Applicazione.mk:

APP_MODULES := ndk_demo 
APP_PLATFORM := android-8 

Poi Infine, vorrei passare alla directory (ndk_demo) ed eseguire NDK-build.

ndk-build è lo strumento di generazione di Android. Dovresti usarlo. Si può trovare all'indirizzo:

(AndroidSDK)/(NDK)/ndk-build 

se si utilizza Windows, si sia necessario digitare il percorso completo della NDK-costruire nella console, oppure aggiungere una variabile d'ambiente al sistema prima di provare a eseguirlo.

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

Problemi correlati