2012-04-11 9 views
7

De this tutorial.Cómo vincular cualquier biblioteca en la aplicación ndk

ver que tengo una biblioteca estática pre-construidos nombrado como stackoverflow.a y tiene stackoverflow.h

ahora quiero utilizar la función de esa biblioteca estática en

ndk_demo.c // tutorial que tiene este archivo

para que en el interior ndk_demo.c he añadido

#include 'stackoverflow.h' 

Editar

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 

Ahora Application.mk

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

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

ahora JNI/lib/Y 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) 

Ahora desde android-ndk-r7c directorio corro

make APP=ndk_demo 

que me muestra error como

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. 

por qué sucede esto no estoy recibiendo?

Si comento

#include $(call all-subdir-makefiles) 

esto desde jni/Android.mk entonces se muestra el error siguiente

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

Se puede publicar el comando de compilación y enlace que sale del makefile? – ams

+0

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

+0

@Nick ver mi actualización –

Respuesta

5

cuando llegue a "hacer: * No hay ninguna regla para hacer objetivo` something.c '", solo significa que no puede encontrar el archivo.

estoy un poco confundido por eso que ha organizado su proyecto así, pero si iba a construir su proyecto, lo haría de la siguiente manera:

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

Entonces me gustaría utilizar el siguiente 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) 

Y lo siguiente:

Aplicación.MK:

APP_MODULES := ndk_demo 
APP_PLATFORM := android-8 

Entonces, finalmente, me vaya al directorio (ndk_demo) y ejecutar NDK-construcción.

ndk-build es la herramienta de compilación de Android. Deberías usarlo Se puede encontrar en:

(AndroidSDK)/(NDK)/ndk-build 

si está usando Windows, o bien tienen que escribir la ruta completa de NDK-construir en la consola, o añadir una variable de entorno en el sistema antes de intentar ejecutarlo.

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

Cuestiones relacionadas