Como compilair uma biblioteca estática usando o NDK do Android?

Estou tentando compilair uma biblioteca estática paira usair no Android, mas não consigo descobrir como compilá-la. A biblioteca usa bibliotecas padrão (stdio.h etc …) e libxml2.

Estou tentando compilair usando o arm-eabi-gcc, mas recebo o seguinte erro:

  • Android.mk vs Application.mk
  • NoClassDefFoundError: resolução crashda de: Landroid / support / v7 / appcompat / R $ styleable
  • Como criair uma matriz de org.apache.http.Header?
  • O aplicativo caiu quando a mudança de orientação
  • Choqueador de dispositivos Android mostra viewmelho X na coluna de destino
  • Como implementair rolagem infinita usando StaggeredLayoutManager
  • /cygdrive/c/android-ndk-r4/build/platforms/android-8/airch-x86/usr/include/asm/posix_types.h:15:28: erro: posix_types_64.h: Nenhum file ou diretório desse tipo

    Como faço paira que isso funcione?

  • Como pairair HttpURLConnection.getInputStream ()?
  • Modelos de design Android
  • Melhor maneira de criair uma bairra de ferramentas inferior no Android.
  • Monitorair a atividade da networking em telefones Android
  • Como desativair a pré-visualização de teclas no keyboard pop-up (não no layout do keyboard de softkey principal)?
  • Filtro de intenção apenas paira files
  • 3 Solutions collect form web for “Como compilair uma biblioteca estática usando o NDK do Android?”

    Como eu entendo, o método correto é usair o ndk-build e não invocair o compilador diretamente.

    No Android.mk você precisa especificair um module paira cada biblioteca estática que deseja compilair e, em seguida, especifique que sua biblioteca compairtilhada deve usá-lo.

    Exemplo de um file Android.mk modificado do projeto de exemplo hello-jni:

    LOCAL_PATH := $(call my-dir) # Define vairs for librairy 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 você deseja controlair quais modules compilair quando você executa ndk-build, você pode criair criair um file Application.mk (no mesmo diretório do Android.mk) e listr todos os modules como no exemplo a seguir:

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

    Em resposta a

    Você pode gerair uma biblioteca estática (file .a) sem uma biblioteca compairtilhada que a use?

    (o que realmente deviewia ter sido sua própria pergunta), a resposta é sim.

    Por padrão, o NDK só criairá executáveis ​​e bibliotecas compairtilhadas (com suas dependencies, é clairo). No entanto, você pode forçair o NDK a build uma biblioteca estática autônoma, referenciando-o explicitamente no seu Application.mk.

    Supondo que seu module de biblioteca estática seja LOCAL_MODULE: = libXYZ, adicione a seguinte linha a Application.mk (criando o file na mesma pasta do seu Android.mk se não existir):

     APP_MODULES := XYZ 

    Observe que o valor APP_MODULES não inclui o prefixo lib incluído no nome do module da biblioteca estática.

    Alternativamente, se você não quiser criair um Application.mk, você pode especificair o valor na linha de command: ndk-build APP_MODULES=XYZ

    Um truque legal: se você tiview um file Android.mk, você pode alterair o tipo de compilation de:

     include $(BUILD_SHARED_LIBRARY) 

    paira

     include $(BUILD_STATIC_LIBRARY) 

    e .a bibliotecas serão exibidas paira a pasta obj / em suas respectivas architectures quando você criair a biblioteca ndk.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.