Android NDK'ye farklı bir araç zinciri kullanması nasıl söylenir?

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

ARM tabanlı Android uygulamaları oluşturmak için özel bir araç zinciri ( linaro ) indirdim . NDK'nın bunu kullanmasını nasıl söyleyebilirim? Android.mk ve Application.mk içinde bunu yapmama izin verecek bir şey tanımlayabilir veya ayarlayabilir miyim? Başka bir yolu var mı?

1 Comments
corbin 03/08/2012
Bunu Ubuntu'da yaptın mı? Takım zincirini nasıl kurdunuz?

3 Answers


Peter M 03/01/2013.

Diğer cevaplardan da anlaşılacağı gibi, $(NDK_ROOT)/toolchains/ -build makefile sistemi tarafından $(NDK_ROOT)/toolchains/ ve orada gördüğünüz fikirleri yansıtabilirsiniz. Ancak Android'in dışındaki hedef platformları desteklemeye yönelik birkaç kavram var. Bunlar, ndk-build'in win32 (ya da düz 'ol linux'u hedefleyen diğer gcc derleyicileri) gibi mingw hedefleme gibi diğer platformları açıkça desteklemeye başlamasıyla birlikte modası geçmiş olsa da ilginçtir. .

config.mk :

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

Bu önemli bir tanımdır, çünkü bu ismi belirli bir ABI için takım zincirini kullanarak oluşturmak için Application.mk uygulamasında kullanabilirsiniz. Bu tanımın kullanılmasını bozmanın yararlarından biri de, ndk-build'in aynı anda birden fazla ABI için geliştirilebilmesidir. Her always platformun Android olduğunu varsayar, ancak win32'yi bir mingw tabanlı toolchain kullanarak hedeflemek isterseniz, x86-win32 olarak bir "ABI" tanımlayabilir ve sonra bu ABI'yi Application.mk ek olarak seçmek için kullanabilirsiniz. APP_ABI:= x86-win32 aracılığıyla hedef APP_ABI:= x86-win32 Daha sonra Android.mk dosyalarınızda, TARGET_ARCH_ABI özgü kaynakları seçmek ve yolları eklemek için TARGET_ARCH_ABI tanımını kullanabilirsiniz, örneğin:

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

Son parça, setup.mk için setup.mk , örnek olarak diğer setup.mk bakmak için yeterli olmayabilir, çünkü belirli bir setup.mk için really setup.mk , default-build-commands.mk setup.mk kurulum ayarlarını geçersiz kılar. Yapmak istediğin, o dosyayı incelemek ve sevmediğin şeyleri yeniden tanımlamak.

Önceki örneği takip ederek, mingw ikili dosyalarda noexec bayrağını desteklemez ve setup.mk aşağıdaki satırları ekleyerek bu özellikten 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! 

Bu, default-build-commands.mk içinde geçersiz kılınması gerekebilecek birçok özelliğin bir örneğidir ve elbette TOOLCHAIN_NAME sağlamak önemlidir, böylece araç zinciri, Application.mk dosyanızın içinde NDK_TOOLCHAIN değişkeni ile seçilebilir. Yukarıda bahsettiğim ABI metodolojisine.


Ian Ni-Lewis 09/12/2013.

NDK makefile sistemi oldukça genişletilebilir ve gerçekten farklı bir takım zinciri tanımlayabilirsiniz. Make'in nasıl çalıştığı hakkında biraz bilgiye ihtiyacınız olacak.

Toolchains, build/core/init.mk satırında 261 (NDKr6'da, satır # gelecek sürümlerde değişebilir) bulunur ve başlatılır. Başlatma kodu $(NDK_ROOT)/toolchains/* altında config.mk adlı dosyaları arar. Bu nedenle, araç zincirinizi NDK araç grupları dizininin altında bir alt dizine eklemeniz ve bu alt dizine bir config.mk ve setup.mk gerekir. toolchains/x86-4.4.3 ve toolchains/x86-4.4.3 toolchains/arm-linux-androideabi-4.4.3 bakın. setup.mk zincirinizin standart bir düzeni varsa, ARM setup.mk config.mk ve setup.mk kesip yapıştırabilmeniz gerekir.

NDK_TOOLCHAIN , Application.mk dosyanızın içinde NDK_TOOLCHAIN değişkenini ayarlayarak buna NDK_TOOLCHAIN .


lily 07/31/2017.

kuyu Application Application.mk dosyasına "NDK_TOOLCHAIN_VERSION = 4.9" yazabilirsiniz.

Related questions

Hot questions

Language

Popular Tags