Wie man Android NDK sagt, eine andere Werkzeugkette zu benutzen

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

Ich habe eine benutzerdefinierte Toolchain ( Linaro ) heruntergeladen, um ARM-basierte Android-Apps zu erstellen. Wie sage ich dem NDK, es zu verwenden? Kann ich etwas in Android.mk und Application.mk definieren oder einstellen, das würde mir erlauben, das zu tun? Gibt es eine andere Art und Weise?

1 Comments
corbin 03/08/2012
Hast du das unter Ubuntu gemacht? Wie hast du die Toolchain installiert?

3 Answers


Peter M 03/01/2013.

Wie die andere Antwort erwähnt, werden Toolchains von ndk-build Makefile-System in $(NDK_ROOT)/toolchains/ und Sie können Ideen spiegeln, die Sie dort sehen. Aber es gibt ein paar zusätzliche Konzepte für die Unterstützung von Nicht-Android-Zielplattformen, die interessant sind, obwohl sie bald veraltet sein könnten, da ndk-build explizit andere Plattformen unterstützt, wie zum Beispiel mingw targeting win32 (oder andere gcc-Compiler, die auf normales Linux zielen) .

In config.mk :

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

Dies ist eine wichtige Definition, da Sie diesen Namen in Ihrer Application.mk verwenden können, um mit der Toolchain für einen bestimmten ABI zu erstellen. Einer der Vorteile der Verwendung dieser Definition besteht darin, dass ndk-build gleichzeitig mehrere ABIs erstellen kann. Es wird always vorausgesetzt, dass es sich bei der Plattform um Android handelt. Wenn Sie jedoch win32 mithilfe einer Mingw-basierten Toolchain targetieren möchten, können Sie einen "ABI" als x86-win32 und diesen ABI dann in Ihrer Application.mk als zusätzlichen verwenden Ziel über APP_ABI:= x86-win32 Dann können Sie in Ihren Android.mk Dateien die TARGET_ARCH_ABI Definition verwenden, um win32-spezifische Quellen auszuwählen und Pfade TARGET_ARCH_ABI , zum Beispiel:

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

Der letzte Teil ist, dass in setup.mk für Ihre Toolchain, es möglicherweise nicht ausreicht, andere Toolchains als Beispiele zu betrachten, denn was setup.mk für eine bestimmte Toolchain really tut, überschreibt Build-Einstellungen in default-build-commands.mk , also Was Sie tun wollen, ist diese Datei zu inspizieren und Dinge neu zu definieren, die Sie nicht mögen.

Nach dem vorherigen Beispiel unterstützt mingw das noexec-Flag in den Binärdateien nicht und Sie können diese Funktion durch Hinzufügen der folgenden Zeilen in Ihrer 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! 

Dies ist nur ein Beispiel für die vielen Features in default-build-commands.mk , die möglicherweise überschrieben werden müssen, und natürlich ist es wichtig TOOLCHAIN_NAME bereitzustellen, damit die Toolchain über NDK_TOOLCHAIN Variable NDK_TOOLCHAIN in Ihrer Application.mk Datei zusätzlich ausgewählt werden kann zu der ABI-Methodik, die ich oben erwähne.


Ian Ni-Lewis 09/12/2013.

Das NDK-Makefile-System ist ziemlich erweiterbar und Sie können tatsächlich eine andere Toolchain definieren. Sie benötigen ein gewisses Verständnis dafür, wie Make funktioniert.

Toolchains werden in der Zeile " build/core/init.mk 261 erkannt und initialisiert (in NDKr6 kann sich die Zeile # in zukünftigen Versionen ändern). Der Initialisierungscode sucht nach Dateien namens config.mk unter $(NDK_ROOT)/toolchains/* . Daher müssen Sie Ihre Toolchain in ein Unterverzeichnis unter dem NDK toolchains-Verzeichnis config.mk und ein config.mk und setup.mk zu diesem Unterverzeichnis hinzufügen. Sehen Sie sich toolchains/x86-4.4.3 und toolchains/arm-linux-androideabi-4.4.3 für Beispiele an. Sie sollten die ARM-Toolchain config.mk und setup.mk config.mk und setup.mk wenn Ihre Toolchain ein Standard-Layout hat.

Sobald Sie eine Toolchain im Verzeichnis der Toolchain definiert haben, können Sie zu ihr wechseln, indem Sie die Variable NDK_TOOLCHAIN in Ihrer Datei Application.mk NDK_TOOLCHAIN .


lily 07/31/2017.

Nun, Sie können einfach "NDK_TOOLCHAIN_VERSION = 4.9" in Ihrer Application.mk hinzufügen

Related questions

Hot questions

Language

Popular Tags