Hur man berättar för Android NDK att använda en annan verktygskedja

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

Jag har laddat ner en anpassad toolchain ( linaro ) för att bygga ARM-baserade Android-appar. Hur säger jag till NDK att använda den? Kan jag definiera eller ställa in något i Android.mk och Application.mk som skulle tillåta mig att göra det? Finns det ett annat sätt?

1 Comments
corbin 03/08/2012
Har du gjort det här på Ubuntu? Hur installerade du verktygskedjan?

3 Answers


Peter M 03/01/2013.

Som det andra svaret nämns, upptäcks verktygskedjor av ndk-build makefile system i $(NDK_ROOT)/toolchains/ och du kan spegla ideer du ser där. Men det finns några extra koncept för att stödja icke-Android-målplattformar som är intressanta, även om de kanske snart är föråldrade, eftersom ndk-build börjar explicit stödja andra plattformar, till exempel mingw som riktar sig till win32 (eller andra gcc-kompilatorer som riktar sig mot vanlig "ol Linux") .

I config.mk :

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

Detta är en viktig definition, eftersom du kan använda det här namnet i programmet Application.mk för att bygga med verktygskedjan för en viss ABI. En av fördelarna med att korrumpera användningen av denna definition är att ndk-build kan byggas samtidigt för flera ABI. Det förutsätter always att plattformen är Android, men om du vill rikta sig till win32 med hjälp av en mingwbaserad verktygslåda, kan du definiera en "ABI" som x86-win32 och använd sedan detta ABI i din Application.mk att välja det som ett tillägg mål via APP_ABI:= x86-win32 Sedan kan du i din Android.mk fil TARGET_ARCH_ABI definitionen för att välja win32-specifika källor och inkludera sökvägar, till exempel:

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

Det sista stycket är det i setup.mk för din verktygskedja, det kan vara otillräckligt att titta på andra verktygsdrag som exempel, för vilken setup.mk för en viss verktygschain really gör det, åsidosätter byggnadsinställningarna i default-build-commands.mk , så vad du vill göra är att inspektera den filen och omdefiniera saker i den som du inte gillar.

Efter det föregående exemplet stöder mingw inte noexec-flaggan i binärerna, och du kan bli av med den här funktionen genom att lägga till följande rader i din 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! 

Det här är bara ett exempel på de många funktionerna i default-build-commands.mk som kan behöva överskridas och det är självklart viktigt att du tillhandahåller TOOLCHAIN_NAME så att verktyget kan väljas via NDK_TOOLCHAIN variabeln i din Application.mk fil i tillägg till ABI-metoden som jag nämner ovan.


Ian Ni-Lewis 09/12/2013.

NDK makefile-systemet är ganska utdragbart och du kan verkligen definiera en annan verktygskedja. Du behöver lite förståelse för hur Gör fungerar.

Verktygslådor upptäckes och initialiseras i build/core/init.mk linje 261 (i NDKr6 kan linjen # ändras i framtida versioner). Initieringskoden söker efter filer med namnet config.mk under $(NDK_ROOT)/toolchains/* . Så du måste lägga till din toolchain i en underkatalog under katalogen NDK verktygskedjor och lägga till en config.mk och setup.mk till den underkatalogen. Titta på toolchains/x86-4.4.3 och toolchains/arm-linux-androideabi-4.4.3 för exempel. Du ska kunna klippa och klistra in ARM toolchain config.mk och setup.mk om verktyget har en standardlayout.

När du har definierat en verktygskedja i verktygskatalogen kan du växla till den genom att ställa in NDK_TOOLCHAIN variabeln i din Application.mk fil.


lily 07/31/2017.

Jo, du kan helt enkelt lägga till "NDK_TOOLCHAIN_VERSION = 4.9" i din Application.mk

Related questions

Hot questions

Language

Popular Tags