android ndk设定工具链,如何告诉Android NDK使用不同的工具链

Peter M..

8

正如另一个答案所提到的,工具链是由ndk-build makefile系统发现的$(NDK_ROOT)/toolchains/,你可以反映你在那里看到的想法.但是有一些额外的概念可以支持非Android目标平台,虽然它们很快就会过时,因为ndk-build开始明确支持其他平台,例如mingw定位win32(或其他针对普通'ol 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,然后在你的中使用这个ABI Application.mk作为附加目标选择它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可能需要覆盖的许多功能的一个示例,当然,除了上面提到的ABI方法之外,提供TOOLCHAIN_NAME工具链以便通过文件中的NDK_TOOLCHAIN变量进行选择是很重要的Application.mk.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值