2011-07-07 63 views
23

我已經下載了一個自定義的工具鏈(linaro)來構建基於ARM的Android應用。我如何告訴NDK使用它?我可以在Android.mk和Application.mk中定義或設置一些允許我這樣做的東西嗎?有另一種方法嗎?如何判斷的Android NDK使用不同的工具鏈

+0

你做這在Ubuntu?你是如何安裝工具鏈的? – corbin

回答

8

至於其他的答案中提到,工具鏈由NDK建造的makefile系統$(NDK_ROOT)/toolchains/發現,並可以反映你看到有想法。但是有一些額外的概念可以支持非Android目標平臺,雖然它們可能很快就會過時,因爲ndk-build開始明確支持其他平臺,比如針對win32的mingw(或其他針對純Linux的gcc編譯器) 。

config.mk

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

這是一個重要的定義,因爲你可以在你的Application.mk使用這個名稱中使用特定ABI工具鏈構建。破壞這個定義的使用的好處之一是,ndk-build可以同時爲多個ABI構建。它總是假設平臺是Android,但如果你想使用基於mingw的工具鏈定位win32,你可以定義一個「ABI」作爲x86-win32,然後在你的Application.mk中使用這個ABI來選擇它作爲額外的目標通過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爲特定的工具鏈真的確實是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,這樣除了上面提到的ABI方法之外,還可以通過Application.mk文件中的NDK_TOOLCHAIN變量來選擇工具鏈。

10

的NDK生成文件系統是很容易擴展,你的確可以定義不同的工具鏈。您需要了解Make的工作原理。

工具鏈被發現並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

在工具鏈目錄中定義了工具鏈後,可以通過在Application.mk文件中設置NDK_TOOLCHAIN變量來切換到該工具鏈。

0

好了,你可以簡單地添加 「NDK_TOOLCHAIN_VERSION = 4.9」 在您的Application.mk

相關問題