Hvordan fortelle Android NDK å bruke et annet verktøykjede

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

Jeg har lastet ned en egendefinert toolchain ( linaro ) for å bygge ARM-baserte Android-apper. Hvordan forteller jeg at NDK skal bruke den? Kan jeg definere eller sette noe i Android.mk og Application.mk som vil tillate meg å gjøre det? Er det en annen måte?

1 Comments
corbin 03/08/2012
Har du gjort dette på Ubuntu? Hvordan installerte du verktøykjeden?

3 Answers


Peter M 03/01/2013.

Som det andre svaret nevner, blir verktøykjeder oppdaget av ndk-build makefile-systemet i $(NDK_ROOT)/toolchains/ og du kan speile ideer du ser der. Men det er noen ekstra konsepter for å støtte ikke-Android-målplattformer som er interessante, selv om de kanskje snart blir utdaterte, da ndk-build begynner å eksplisitt støtte andre plattformer, for eksempel mingw rettet mot win32 (eller andre gcc-kompilatorer rettet mot vanlig 'ol Linux) .

I config.mk :

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports) 

Dette er en viktig definisjon, fordi du kan bruke dette navnet i Application.mk for å bygge med verktøykjeden for en bestemt ABI. En av fordelene ved å ødelegge bruken av denne definisjonen er at ndk-build kan bygge for flere ABIer samtidig. Det går always fra at plattformen er Android, men hvis du vil målrette mot win32 ved hjelp av et mingw-basert verktøy, kan du definere en "ABI" som x86-win32 , og deretter bruke denne ABI i Application.mk å velge den som en ekstra mål via APP_ABI:= x86-win32 Så i Android.mk filene dine kan du bruke definisjonen TARGET_ARCH_ABI til å velge win32-spesifikke kilder og inkludere baner, for eksempel:

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif 

Det endelige stykket er det i setup.mk for verktøylinjen, kan det være utilstrekkelig å se på andre verktøylinjer som eksempler, fordi hva setup.mk for en bestemt verktøylinje really gjør, er tilsidesatt setup.mk i standard-build-commands.mk, så hva du vil gjøre er å inspisere den filen og omdefinere ting i det du ikke liker.

Etter det forrige eksempelet støtter mingw ikke noexec-flagget i binærene, og du kan bli kvitt denne funksjonen ved å legge til følgende linjer i setup.mk :

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag! 

Dette er bare ett eksempel på de mange funksjonene i default-build-commands.mk som kanskje må overstyres, og selvfølgelig er det viktig å gi TOOLCHAIN_NAME slik at verktøylinjen kan velges via NDK_TOOLCHAIN variabelen i Application.mk fil i tillegg til ABI-metoden jeg nevner ovenfor.


Ian Ni-Lewis 09/12/2013.

NDK makefile-systemet er ganske utvidbart, og du kan faktisk definere en annen verktøykjede. Du trenger litt forståelse av hvordan Make fungerer.

Verktøykjeder oppdages og initialiseres i build/core/init.mk linje 261 (i NDKr6 kan linjen # endres i fremtidige versjoner). Initialiseringskoden ser etter filer kalt config.mk under $(NDK_ROOT)/toolchains/* . Så du må legge til verktøylinjen i en underkatalog under NDK-verktøylinjekatalogen, og legg til en config.mk og setup.mk i den underkatalogen. Se på toolchains/x86-4.4.3 og toolchains/arm-linux-androideabi-4.4.3 for eksempler. Du bør kunne klippe og lime inn ARM toolchain config.mk og setup.mk hvis verktøylinjen har et standardoppsett.

Når du har definert en verktøylinje i verktøylinjekatalogen, kan du bytte til den ved å angi variabelen NDK_TOOLCHAIN i filen Application.mk .


lily 07/31/2017.

Vel, du kan bare legge til "NDK_TOOLCHAIN_VERSION = 4.9" i Application.mk

Related questions

Hot questions

Language

Popular Tags