Android NDKに別のツールチェーンを使用するように指示する方法

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

私はカスタムのツールチェーン( linaro )をダウンロードしてARMベースのAndroidアプリをビルドしました。 NDKにそれを使用するようにどのように伝えますか? Android.mkとApplication.mkで何かを定義したり設定したりすることができますか? 別の方法がありますか?

1 Comments
corbin 03/08/2012
あなたはUbuntuでこれをしましたか? どのようにツールチェーンをインストールしましたか?

3 Answers


Peter M 03/01/2013.

もう1つの答えが言及しているように、ツールチェーンは$(NDK_ROOT)/toolchains/ ndk-build makefileシステムによって発見され、そこに見えるアイデアを反映することができます。 しかし、Android以外のターゲットプラットフォームをサポートするためのいくつかのコンセプトは興味深いですが、ndk-buildが他のプラットフォームを明示的にサポートするようになるとすぐに古くなるかもしれませんが、win32(または他のgccコンパイラ) 。

config.mk

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

これは重要な定義です。これは、Application.mkでこの名前を使用して特定のABIのツールチェーンを使用して構築できるためです。 この定義の使い方を損なう利点の1つは、ndk-buildが複数のABIを同時に構築できることです。 alwaysプラットフォームがAndroidであることalways前提としていますが、mingwベースのツールチェーンを使用してwin32をターゲットにしたい場合は、「ABI」をx86-win32として定義し、 Application.mkこのABIを使用して追加APP_ABI:= x86-win32を介してターゲットAndroid.mkファイルでは、 TARGET_ARCH_ABI定義を使用してwin32固有のソースを選択し、パスをAndroid.mkすることができます。

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

最後の部分は、あなたのツールチェーン用のsetup.mkでは、他のツールチェーンを例として見るには不十分かもしれません。なぜなら特定のツールチェーン用のsetup.mkdefault-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の多くの機能の単なる1つの例です。もちろん、 Application.mkファイル内のNDK_TOOLCHAIN変数によってツールチェーンを選択できるようにTOOLCHAIN_NAMEを提供することも重要です上記のABIの方法論と同じです。


Ian Ni-Lewis 09/12/2013.

NDKのmakefileシステムは非常に拡張性があり、実際には別のツールチェーンを定義することができます。 Makeがどのように機能するかを理解する必要があります。

ツールbuild/core/init.mkは、 build/core/init.mk行261(NDKr6では、行番号は将来のバージョンで変更される可能性があります)で検出され、初期化されます。 初期化コードは$(NDK_ROOT)/toolchains/*下のconfig.mkという名前のファイルを探します。 そのため、NDKツールチェーンディレクトリの下のサブディレクトリにツールチェインを追加し、そのサブディレクトリにconfig.mksetup.mkを追加する必要があります。 例については、 toolchains/x86-4.4.3toolchains/arm-linux-androideabi-4.4.3を見てください。 ツールチェーンに標準レイアウトがある場合は、ARMツールチェーンconfig.mksetup.mkをカット&ペーストできます。

toolchainディレクトリにツールチェーンを定義したら、 Application.mkファイル内のNDK_TOOLCHAIN変数を設定して、ツールチェインに切り替えることができます。


lily 07/31/2017.

まあ、Application.mkに単に "NDK_TOOLCHAIN_VERSION = 4.9"を追加するだけです

Related questions

Hot questions

Language

Popular Tags