2011-01-04 26 views
13

Estoy envolviendo una API nativa para Android por NDK.No se pueden encontrar archivos de encabezado - Android NDK

Pero al construirlo no encuentra los archivos de encabezado.

Tengo la siguiente estructura.

proyecto/JNI

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(call all-subdir-makefiles) 

LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c DelegateDRMProcessorClient.cpp 
LOCAL_STATIC_LIBRARY := adept cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib 

include $(BUILD_SHARED_LIBRARY) 

proyecto/JNI/prereqs/

Android.mk (utilizado para llamar a todos los subdirectorios archivos Android.mk)

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 

proyecto/jni/prereqs /% lib%/

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE :=dp 
LOCAL_SRC_FILES :=libdp.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 

include $(PREBUILT_STATIC_LIBRARY) 

Y hay una carpeta de incluir en cada carpeta% lib%.

Al utilizar NDK-build me siento un "/home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20: Error: dp_all.h: No existe el fichero o directorio "

¿Alguien sabe cómo incluir estos encabezados para que estén disponibles para el compilador?

+1

¿Cuál es la ruta de acceso donde se encuentra dp_all.h? –

+0

project/jni/prereqs/dp/include –

+0

@Marcos, ¿te importaría compartir cómo importaste las bibliotecas estáticas "adept cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib" ?? Quiero importar algunas de estas bibliotecas pero estoy teniendo un momento difícil. Por ejemplo, ¿cómo compilaste zlib para importarlo aquí? – Tiago

Respuesta

15

lo resuelvo, conseguir todas las cabeceras en una carpeta y que incluye la siguiente línea en el Android.mk

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all 

Esto funciona, pero no parece el mejor enfoque.

12

estoy un poco tarde a la fiesta, pero se encontró con el mismo problema y podría tener una respuesta para su comentario: "Esto funciona, pero no parece el mejor enfoque"

No; sa la muestra en el NDK llamado "módulo-exportaciones" Muestra cómo construir un archivo Android.mk que respeta archivos de encabezado que viven en sus directorios adecuados y no todos volcados en un único directorio de inclusión.

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := foo 
LOCAL_SRC_FILES := foo/foo.c 
LOCAL_CFLAGS := -DFOO=2 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo 
LOCAL_EXPORT_CFLAGS := -DFOO=1 
LOCAL_EXPORT_LDLIBS := -llog 
include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := bar 
LOCAL_SRC_FILES := bar/bar.c 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar 
LOCAL_STATIC_LIBRARIES := foo 
include $(BUILD_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := zoo 
LOCAL_SRC_FILES := zoo/zoo.c 
LOCAL_SHARED_LIBRARIES := bar 
include $(BUILD_SHARED_LIBRARY) 
+0

Bueno, es que funciona con un único archivo Android.mk, recursivamente fue respondido en otra pregunta de mi propio –

+1

¿Puede incluir un enlace a la respuesta a la que se refiere? –

3

Años después ...

Para exportar el directorio en lugar de archivos individuales incluyen, utilizo el siguiente:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(MY_DIRECTORY_PATH) 

Por ejemplo, para la pregunta anterior para la exportación "foo "se vería así:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/foo 
+0

"LOCAL_EXPORT_C_INCLUDES: =" – DevByStarlight

+0

Gracias Starlight. Parece que las reglas de compilación se han actualizado. Siempre puede cambiar la respuesta ya que ha probado la regla más nueva. _DIRS funcionó para mí en ese momento. –

1

Para mayor conveniencia de las personas, solo quiero agregar que mueva todo su encabezado archivos en la carpeta a los que se refiere LOCAL_C_INCLUDES: = $ (LOCAL_PATH) y luego guarde android.mk y reinicie eclipse. Después de probar todas las soluciones anteriores, eso funcionó para mí.

+0

El problema aquí describe el caso en el que tiene encabezados en muchas subcarpetas, puede agregar todos los .h en una carpeta y la importación funcionará de hecho. –

Cuestiones relacionadas