Come compilare una libreria statica utilizzando l’Android NDK?

Sto cercando di compilare una libreria statica per l’uso su Android, ma io non riesco a capire come compilarlo. La libreria utilizza librerie standard (stdio.h ecc…) e libxml2.

Sto cercando di compilare l’utilizzo di braccio-eabi-gcc, ma ottengo il seguente errore:

/cygdrive/c/android ndk-r4/build/piattaforme/android-8/arch-x86/usr/include/asm/posix_types.h:15:28: errore: posix_types_64.h: No such file or directory

Come faccio a farlo funzionare?

InformationsquelleAutor Reimund | 2010-05-31

 

3 Replies
  1. 47

    Da quanto ho capito, il metodo corretto è quello di utilizzare ndk-build e non invocare il compilatore direttamente.

    In Android.mk è necessario specificare un modulo per ogni libreria statica che si desidera compilare, e poi specificare che il libreria condivisa dovrebbe utilizzare.

    Esempio di una versione modificata di Android.mk file di ciao-jni progetto di esempio:

    LOCAL_PATH := $(call my-dir)
    
    # Define vars for library that will be build statically.
    include $(CLEAR_VARS)
    LOCAL_MODULE := <module_name>
    LOCAL_C_INCLUDES := <header_files_path>
    LOCAL_SRC_FILES :=  <list_of_src_files>
    
    # Optional compiler flags.
    LOCAL_LDLIBS   = -lz -lm
    LOCAL_CFLAGS   = -Wall -pedantic -std=c99 -g
    
    include $(BUILD_STATIC_LIBRARY)
    
    # First lib, which will be built statically.
    include $(CLEAR_VARS)
    LOCAL_MODULE := hello-jni
    LOCAL_STATIC_LIBRARIES := <module_name>
    LOCAL_C_INCLUDES := <header_files_path>
    LOCAL_SRC_FILES := hello-jni.c
    
    include $(BUILD_SHARED_LIBRARY)

    Se si vuole il controllo oltre che i moduli da compilare quando si esegue ndk-build è possibile creare un Applicazione.mk file nella stessa directory (come Android.mk) e l’elenco di tutti i moduli, come nel seguente esempio:

    APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n>
  2. 9

    In risposta a

    È in grado di generare una libreria statica (.un file) senza una libreria condivisa
    che usi?

    (che in realtà avrebbe dovuto essere la sua stessa domanda), la risposta è sì.

    Per impostazione predefinita, l’NDK crea solo file eseguibili e librerie condivise (con le loro dipendenze, naturalmente). Tuttavia, è possibile forzare l’NDK per costruire un autonomo libreria statica facendo riferimento in modo esplicito nell’Applicazione.mk.

    Supponendo che la vostra libreria statica modulo è LOCAL_MODULE := libXYZ, aggiungere la seguente riga al Applicazione.mk (la creazione di un file nella stessa cartella del vostro Android.mk se non esiste):

    APP_MODULES := XYZ

    Nota la APP_MODULES valore non include l’lib prefisso incluso nella libreria statica nome del modulo.

    In alternativa, se non si desidera creare un’Applicazione.mk, è possibile specificare il valore sulla riga di comando: ndk-build APP_MODULES=XYZ

    • non ha funzionato… ho ancora avuto solo file.allora… sto cercando qualche modo per generare il file.un (statico)
  3. 4

    Un trucco: se hai un Android.mk file, è possibile modificare il tipo di generazione da:

    include $(BUILD_SHARED_LIBRARY)

    per

    include $(BUILD_STATIC_LIBRARY)

    e .un librerie, verrà emesso l’obj/cartella nelle rispettive architetture quando si ndk-build biblioteca.

Lascia un commento