我已经下载了一个自定义的工具链(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