Как сообщить Android NDK использовать другую инструментальную цепочку

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

Я загрузил пользовательскую инструментальную цепочку ( linaro ) для создания приложений на базе Android на базе ARM. Как сообщить NDK об этом? Могу ли я определить или установить что-то в Android.mk и Application.mk, что позволит мне это сделать? Есть ли другой способ?

1 Comments
corbin 03/08/2012
Вы делали это на Ubuntu? Как вы установили toolchain?

3 Answers


Peter M 03/01/2013.

Как упоминается в другом ответе, инструментальные цепочки обнаруживаются в системе make-файлов ndk-build в $(NDK_ROOT)/toolchains/ и вы можете отражать идеи, которые там видите. Но есть несколько дополнительных концепций для поддержки целевых платформ, отличных от Android, которые интересны, хотя они могут скоро устаревать, поскольку ndk-build начинает явно поддерживать другие платформы, такие как mingw-таргетинг win32 (или другие компиляторы gcc, нацеленные на простой Linux-сервер) ,

В config.mk :

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

Это важное определение, потому что вы можете использовать это имя в своем Application.mk для создания с использованием инструментальной цепочки для конкретного ABI. Одним из преимуществ искажения использования этого определения является то, что ndk-build может одновременно создавать несколько ABI. Он always предполагает, что платформа Android, но если вы хотите нацелить win32 с помощью инструментальной цепочки на основе mingw, вы можете определить «ABI» как x86-win32 , а затем использовать этот ABI в своем Application.mk чтобы выбрать его как дополнительный target через APP_ABI:= x86-win32 Затем в ваших файлах Android.mk вы можете использовать определение TARGET_ARCH_ABI чтобы выбрать источники данных Win32 и включить пути, например:

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

Последняя часть заключается в том, что в setup.mk для вашей инструментальной цепочки может быть недостаточно взглянуть на другие инструментальные средства в качестве примеров, потому что то, что setup.mk для конкретной инструментальной цепочки really делает, - это переопределение настроек сборки в default-build-commands.mk , поэтому то, что вы хотите сделать, это проверить этот файл и переопределить все, что вам не нравится.

Следуя предыдущему примеру, mingw не поддерживает флаг noexec в двоичных файлах, и вы можете избавиться от этой функции, добавив следующие строки в ваш 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! 

Это всего лишь один из примеров многих функций default-build-commands.mk которые, возможно, необходимо переопределить, и, конечно же, важно предоставить TOOLCHAIN_NAME чтобы инструментальная цепочка могла быть выбрана с помощью переменной NDK_TOOLCHAIN внутри вашего файла Application.mk к методологии ABI, о которой я упоминал выше.


Ian Ni-Lewis 09/12/2013.

Система makefile NDK довольно расширяема, и вы действительно можете определить другую инструментальную цепочку. Вам нужно некоторое понимание того, как работает Make.

build/core/init.mk обнаруживаются и инициализируются в строке 261 build/core/init.mk (в NDKr6 строка # может изменяться в будущих версиях). Код инициализации ищет файлы с именем config.mk под $(NDK_ROOT)/toolchains/* . Поэтому вам нужно добавить свою инструментальную цепочку в подкаталог в каталоге инструментов NDK toolchains и добавить в этот подкаталог config.mk и setup.mk . Посмотрите на toolchains/x86-4.4.3 и toolchains/arm-linux-androideabi-4.4.3 для примеров. Вы должны иметь возможность вырезать и вставлять toolchain ARM config.mk и setup.mk если ваша toolchain имеет стандартную компоновку.

После того, как вы определили toolchain в каталоге toolchain, вы можете переключиться на него, установив переменную NDK_TOOLCHAIN внутри вашего файла Application.mk .


lily 07/31/2017.

ну, вы можете просто добавить «NDK_TOOLCHAIN_VERSION = 4.9» в свой Application.mk

Related questions

Hot questions

Language

Popular Tags