2010-05-31 15 views
32

Estoy tratando de compilar una biblioteca estática para usar en Android, pero no puedo encontrar la manera de compilarla. La biblioteca usa librerías estándar (stdio.h etc ...) y libxml2.¿Cómo compilar una biblioteca estática usando el NDK de Android?

Estoy intentando compilar usando el brazo-EABI-gcc, pero me sale el siguiente error:

/cygdrive/c/android-NDK-R4/build/plataformas/android-8/arch-x86/usr /include/asm/posix_types.h:15:28: error: posix_types_64.h: Ningún archivo o directorio

¿Cómo hago para que funcione?

Respuesta

44

Según tengo entendido, el método correcto es usar ndk-build y no invocar el compilador directamente.

En Android.mk necesita especificar un módulo para cada biblioteca estática que desea compilar, y luego especificar que su biblioteca compartida debe usarlo.

Ejemplo de un archivo Android.mk modificado del proyecto de ejemplo hello-JNI:

Si desea control sobre qué módulos para compilar cuando se ejecuta NDK-construir puede crear crear una aplicación . mk archivo (en el mismo directorio que Android.mk) y una lista de todos los módulos como en el siguiente ejemplo:

APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n> 
+0

hice lo mismo pero aún no funciona, vea http: // stackoverflow.com/questions/10106965/how-to-link-any-libarary-in-ndk-application –

+7

¿Se puede generar una biblioteca estática (archivo .a) sin una biblioteca compartida que la use? – user1027169

+0

[Compilar biblioteca estática utilizando la cadena de herramientas independiente para Android] (https://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-android/) – TMZ

6

en respuesta a

Can you generate a static library (.a file) without a shared library that uses it?

(que realmente debería haber sido su propia pregunta), la respuesta es sí.

De forma predeterminada, el NDK solo compilará ejecutables y bibliotecas compartidas (con sus dependencias, por supuesto). Sin embargo, puede obligar al NDK a crear una biblioteca estática independiente al hacer referencia explícita en su Application.mk.

Asumiendo que su módulo de biblioteca estática es LOCAL_MODULE: = libXYZ, añadir la siguiente línea a Application.mk (crear el archivo en la misma carpeta que el Android.mk si no existe):

APP_MODULES := XYZ 

Tenga en cuenta que el valor APP_MODULES no incluye el prefijo lib incluido en su nombre de módulo de biblioteca estática.

Como alternativa, si no desea crear una Application.mk, puede especificar el valor en la línea de comandos: ndk-build APP_MODULES=XYZ

1

Un buen truco: si usted tiene un archivo Android.mk, puede cambiar el tipo de construcción de:

include $(BUILD_SHARED_LIBRARY) 

a

include $(BUILD_STATIC_LIBRARY) 

y .a las bibliotecas se dará salida a la obj/carpeta en sus respectivas arquitecturas cuando NDK-construir la lib Rary.

Cuestiones relacionadas