Sådan fortæller du Android NDK at bruge et andet værktøjskæde

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

Jeg har hentet en brugerdefineret værktøjskæde ( linaro ) til at opbygge ARM-baserede Android-apps. Hvordan fortæller jeg NDK at bruge det? Kan jeg definere eller indstille noget i Android.mk og Application.mk, som vil tillade mig at gøre det? Er der en anden måde?

1 Comments
corbin 03/08/2012
Har du gjort dette på Ubuntu? Hvordan installerede du værktøjskæden?

3 Answers


Peter M 03/01/2013.

Som det andet svar nævner, bliver værktøjskæder opdaget af ndk-build makefile-systemet i $(NDK_ROOT)/toolchains/ og du kan spejle ideer, du ser der. Men der er et par ekstra koncepter til understøttelse af ikke-Android-målplatforme, der er interessante, selv om de måske snart bliver forældede, da ndk-build begynder at eksplicit understøtte andre platforme, såsom mingw rettet mod win32 (eller andre gcc-kompilatorer, der er rettet mod almindelig 'ol Linux') .

I config.mk :

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

Dette er en vigtig definition, fordi du kan bruge dette navn i din Application.mk til at bygge ved hjælp af værktøjskæden til en bestemt ABI. En af fordelene ved at ødelægge brugen af ​​denne definition er, at ndk-build samtidig kan opbygge flere ABI'er. Det går always ud fra, at platformen er Android, men hvis du vil målrette mod win32 ved hjælp af et mingw-baseret værktøjskæde, kan du definere en "ABI" som x86-win32 og derefter bruge denne ABI i din Application.mk til at vælge den som en ekstra mål via APP_ABI:= x86-win32 Så i dine Android.mk filer kan du bruge TARGET_ARCH_ABI definitionen til at vælge win32 specifikke kilder og inkludere stier, for eksempel:

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

Det endelige stykke er det i setup.mk for dit værktøjskæde, det kan være utilstrækkeligt at se på andre værktøjskæder som eksempler, fordi hvad setup.mk for en bestemt toolchain really gør, tilsidesætter bygningsindstillingerne i default-build-commands.mk , så hvad du vil gøre er at inspicere den fil og omdefinere ting i det, du ikke kan lide.

Efter det foregående eksempel understøtter mingw ikke noexec-flag i binærerne, og du kan slippe af med denne funktion ved at tilføje følgende linjer 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! 

Dette er blot et eksempel på de mange funktioner i default-build-commands.mk som muligvis skal tilsidesættes, og det er selvfølgelig vigtigt at give TOOLCHAIN_NAME så værktøjskæden kan vælges via NDK_TOOLCHAIN variablen i din Application.mk fil i tillæg til ABI-metoden, som jeg nævner ovenfor.


Ian Ni-Lewis 09/12/2013.

NDK makefile-systemet er ret udvideligt, og du kan faktisk definere et andet værktøjskæde. Du skal have en vis forståelse for, hvordan Gør fungerer.

Værktøjskæder opdages og initialiseres i build/core/init.mk line 261 (i NDKr6 kan linjen # ændres i fremtidige versioner). Initialiseringskoden søger efter filer med navnet config.mk under $(NDK_ROOT)/toolchains/* . Så du bliver nødt til at tilføje dit værktøjskæde i en undermappe under NDK-værktøjskæderne, og tilføj en config.mk og setup.mk til underkatalogen. Se på toolchains/x86-4.4.3 og toolchains/arm-linux-androideabi-4.4.3 til eksempler. Du skal kunne klippe og indsætte ARM toolchain config.mk og setup.mk hvis dit værktøjskæde har et standardlayout.

Når du har defineret et værktøjskæde i værktøjslinjekataloget, kan du skifte til det ved at indstille NDK_TOOLCHAIN variablen i din Application.mk fil.


lily 07/31/2017.

Nå, du kan bare tilføje "NDK_TOOLCHAIN_VERSION = 4.9" i din Application.mk

Related questions

Hot questions

Language

Popular Tags