Jak zkompilovat statickou knihovnu pomocí Android NDK?

hlasů
32

Snažím se sestavit statické knihovny pro použití v systému Android, ale nemůžu přijít na to, jak ho sestavit. Knihovna používá standardní knihovny (stdio.h atd ...) a libxml2.

Snažím se sestavit s použitím ARM EABI-gcc, ale dostanu následující chybu:

/cygdrive/c/android-ndk-r4/build/platforms/android-8/arch-x86/usr/include/asm/posix_types.h:15:28: error: posix_types_64.h: Žádný takový soubor nebo adresář

Jak mohu dostat, aby to fungovalo?

Položena 31/05/2010 v 14:32
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
44

Jak jsem pochopil, správný způsob je použít NDK-build a nikoli odvoláním kompilátor přímo.

V Android.mk je třeba zadat modul pro jednotlivé statické knihovny, které chcete sestavit, a pak určit, že sdílená knihovna by měla používat.

Příkladem modifikovaného Android.mk souboru projektu vzorku ahoj-JNI:

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)

Pokud se chcete kontrolu nad tím, které moduly ke kompilaci při spuštění NDK-build můžete vytvořit vytvořit Application.mk souboru (ve stejném adresáři jako Android.mk) a seznam všech modulů, jako v následujícím příkladu:

APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n>
Odpovězeno 02/06/2010 v 12:54
zdroj uživatelem

hlasů
6

V reakci na

Můžete vygenerovat statickou knihovnu (.a souboru) bez sdílené knihovně, která jej používá?

(Které ve skutečnosti mělo být jeho vlastní otázka), odpověď zní ano.

Ve výchozím nastavení bude NDK stavět pouze spustitelné soubory a sdílené knihovny (s jejich závislostmi samozřejmě). Můžete však vynutit NDK vybudovat samostatnou statickou knihovnu explicitně odkazování v Application.mk.

Za předpokladu, že svou statickou modul knihovny je LOCAL_MODULE: = libXYZ, přidejte následující řádek do Application.mk (vytvoření souboru ve stejné složce jako váš Android.mk pokud neexistuje):

APP_MODULES := XYZ

Všimněte si hodnotu APP_MODULES nezahrnuje lib předponu obsažený ve vašem statickým jménem knihovny modulu.

Případně, pokud nechcete vytvořit Application.mk, můžete zadat hodnotu do příkazového řádku: ndk-build APP_MODULES=XYZ

Odpovězeno 04/03/2014 v 13:59
zdroj uživatelem

hlasů
1

Pohodě trik: pokud máte soubor Android.mk, můžete změnit typ sestavení od:

include $(BUILD_SHARED_LIBRARY)

na

include $(BUILD_STATIC_LIBRARY)

a .A knihovny bude vystupovat na obj / složky do svých architektur při NDK-build knihovny.

Odpovězeno 18/06/2015 v 03:18
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more