Bagaimana untuk memberitahu Android NDK untuk menggunakan toolchain yang berbeza

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

Saya telah memuat turun toolchain adat ( linaro ) untuk membina aplikasi Android berasaskan ARM. Bagaimanakah saya memberitahu NDK untuk menggunakannya? Bolehkah saya mentakrifkan atau menetapkan sesuatu dalam Android.mk dan Application.mk yang membolehkan saya melakukannya? Adakah terdapat cara lain?

1 Comments
corbin 03/08/2012
Adakah anda melakukan ini di Ubuntu? Bagaimana anda memasang toolchain?

3 Answers


Peter M 03/01/2013.

Seperti yang dijawab oleh jawapan lain, rantai alat dijumpai oleh ndk-build makefile system dalam $(NDK_ROOT)/toolchains/ dan anda boleh mencerminkan idea-idea yang anda lihat di sana. Tetapi terdapat beberapa konsep tambahan untuk menyokong platform sasaran bukan Android yang menarik walaupun mereka mungkin tidak lama lagi kerana ndk-build mula menyokong secara eksplisit platform lain, seperti mingw yang menyasarkan win32 (atau penyusun gcc lain yang menyasarkan 'plain linux' .

Dalam config.mk :

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

Ini adalah takrifan yang penting, kerana anda boleh menggunakan nama ini dalam Application.mk anda untuk membina menggunakan toolchain untuk ABI tertentu. Salah satu faedah merosakkan penggunaan definisi ini, ialah ndk-build secara serentak boleh dibina untuk pelbagai ABI. Ia always menganggap bahawa platform adalah Android, tetapi jika anda mahu menargetkan win32 menggunakan toolchain berasaskan mingw, anda boleh menentukan "ABI" sebagai x86-win32 , dan kemudian gunakan ABI ini di Application.mk anda untuk memilihnya sebagai tambahan Sasaran melalui APP_ABI:= x86-win32 Kemudian dalam fail Android.mk anda boleh menggunakan definisi TARGET_ARCH_ABI untuk memilih sumber khusus win32 dan termasuk jalan, contohnya:

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

Sekeping terakhir ialah dalam setup.mk untuk setup.mk anda, mungkin tidak mencukupi untuk melihat rantai alat lain sebagai contoh, kerana apa setup.mk untuk toolchain tertentu really melakukan override membina tetapan dalam default-build-commands.mk , jadi apa yang anda mahu lakukan ialah memeriksa fail itu, dan ubah semula perkara-perkara di dalamnya yang anda tidak suka.

Mengikuti contoh sebelumnya, mingw tidak menyokong bendera noexec dalam binari, dan anda boleh menyingkirkan ciri ini dengan menambah baris berikut dalam setup.mk anda:

# 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! 

Ini adalah satu contoh banyak ciri dalam default-build-commands.mk yang mungkin perlu ditindih, dan tentu saja penting untuk menyediakan TOOLCHAIN_NAME supaya toolchain dapat dipilih melalui pemboleh ubah NDK_TOOLCHAIN di dalam file Application.mk anda di samping kepada kaedah ABI yang saya nyatakan di atas.


Ian Ni-Lewis 09/12/2013.

Sistem makefile NDK cukup luas dan anda memang boleh menentukan alat yang berbeza. Anda akan memerlukan sedikit pemahaman tentang bagaimana membuat kerja.

Rantai alat ditemui dan diasaskan pada baris build/core/init.mk 261 (dalam NDKr6, barisan # mungkin berubah pada versi masa depan). Kod config.mk mencari fail bernama config.mk di bawah $(NDK_ROOT)/toolchains/* . Jadi, anda perlu menambah toolchain anda dalam subdirektori di bawah direktori toolkit NDK, dan tambahkan config.mk dan setup.mk ke subdirektori tersebut. Lihat toolchains/x86-4.4.3 dan toolchains/arm-linux-androideabi-4.4.3 untuk contoh. Anda sepatutnya dapat memotong dan menampal config.mk config.mk ARM dan setup.mk jika toolchain anda mempunyai tata letak standard.

Sebaik sahaja anda telah menetapkan toolchain dalam direktori toolchain, anda boleh beralih kepadanya dengan menetapkan pemboleh ubah NDK_TOOLCHAIN di dalam fail Application.mk anda.


lily 07/31/2017.

baik, anda boleh menambah "NDK_TOOLCHAIN_VERSION = 4.9" di Application.mk anda

Related questions

Hot questions

Language

Popular Tags