我已經下載了一個自定義的工具鏈(linaro)來構建基於ARM的Android應用。我如何告訴NDK使用它?我可以在Android.mk和Application.mk中定義或設置一些允許我這樣做的東西嗎?有另一種方法嗎?如何判斷的Android NDK使用不同的工具鏈
回答
至於其他的答案中提到,工具鏈由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
變量來選擇工具鏈。
的NDK生成文件系統是很容易擴展,你的確可以定義不同的工具鏈。您需要了解Make的工作原理。
工具鏈被發現並build/core/init.mk
線路261(在NDKr6,線#可能會在未來版本中改變)初始化。初始化代碼在$(NDK_ROOT)/toolchains/*
下查找名爲config.mk
的文件。所以你需要添加在NDK工具鏈目錄下的子目錄的工具鏈,並添加config.mk
和setup.mk
到該子目錄。示例請參閱toolchains/x86-4.4.3
和toolchains/arm-linux-androideabi-4.4.3
。如果您的工具鏈具有標準佈局,您應該能夠剪切並粘貼ARM工具鏈config.mk
和setup.mk
。
在工具鏈目錄中定義了工具鏈後,可以通過在Application.mk
文件中設置NDK_TOOLCHAIN
變量來切換到該工具鏈。
好了,你可以簡單地添加 「NDK_TOOLCHAIN_VERSION = 4.9」 在您的Application.mk
- 1. 使用Android NDK工具鏈構建SpiderMonkey
- 2. 如何使用不同的工具鏈
- 3. 使用Android NDK獨立工具鏈鏈接失敗的PCRE
- 4. 的Android NDK r11c鐺工具鏈
- 5. 使用NDK工具鏈構建SDL2
- 6. Android NDK工具
- 7. 如何交叉編譯庫使用獨立的NDK工具鏈
- 8. 爲Android創建獨立工具鏈NDK
- 9. android跨編譯,ndk,工具鏈
- 10. 的Android NDK使-獨立的工具鏈失敗的MIPS
- 11. Proguard Android如何判斷?
- 12. Android NDK工具鏈無法使用「.so.0.6文件」
- 13. 在Windows中使用工具鏈文件CMake android NDK項目
- 14. 如何從Android NDK中刪除工具鏈?
- 15. Android NDK:與Android Studio 2.2,Gradle和externalNativeBuild + Android.mk的鏗鏘工具鏈
- 16. 如何判斷使用wx.aui
- 17. 如何判斷openmp不同步陣列
- 18. 如何判斷Vim不使用〜/ .vim
- 19. 您的NDK /工具鏈不支持指定的Android本機API級別'android-8'
- 20. 編譯GCC要使用NDK獨立工具鏈
- 21. 的Android NDK建立獨立的工具鏈ARM
- 22. Android:如何判斷錯誤的位置
- 23. 「配置」與Android NDK獨立的工具鏈沒有
- 24. 的Android NDK工具鏈異常處理賽格故障
- 25. 連接2+靜態庫與Android NDK工具鏈的順序
- 26. 是否有Android NDK r9c的遺留工具鏈?
- 27. 如何使用cmake 3.7.2將編譯器設置爲NDK工具鏈中的gcc?
- 28. 使用Android Jack工具鏈的NoSuchMethodError
- 29. Android ndk不同cflags
- 30. 如何判斷Android設備何時具有Geocoder後端服務?
你做這在Ubuntu?你是如何安裝工具鏈的? – corbin