Android NDK和LOCAL_ARM_MODE标志

时间:2014-02-14 22:03:06

标签: android android-ndk

在我目前的Android本机代码构建设置中,APP_ABI被定义为Application.mk中的armeabi-v7a。对于我正在构建的一些库,我看到LOCAL_ARM_MODE在Android.mk中被定义为arm。

我还需要扩展此设置以构建x86。从另一篇文章中可以看出,使用“APP_ABI = all”是一个更好的解决方案。我只是想知道是否还必须更改LOCAL_ARM_MODE。无论如何,这面旗帜会做什么?

2 个答案:

答案 0 :(得分:6)

LOCAL_ARM_MODE可用于定义应用程序所针对的平台。要为x86设置Android.mk,只需在Android.mk文件中包含所需的信息 - 例如:

ifeq ($(TARGET_ARCH),arm)
    LOCAL_CFLAGS := -mfpu=neon -march=armv6t2 -O9
    LOCAL_SRC_FILES := engine-arm.s
endif
ifeq ($(TARGET_ARCH),x86)
    LOCAL_CFLAGS := -msse2 -m32 -masm=intel
    LOCAL_SRC_FILES := engine-x86.s
endif

有关定义应用程序目标的不同选项的详细信息,请查看/docs/Android-mk

来源:Compile assembly code for ARM and X86

答案 1 :(得分:4)

虽然这是一篇旧帖子,但我只想指出接受的答案是不正确的。

LOCAL_ARM_MODE可以设置为" arm"或"拇指"并且默认为"拇指"。 "拇指"使用16位指令而#34; arm"使用32位指令。 16位指令较小,但对于某些性能关键应用程序可能会很慢。这就是为什么对于某些图书馆来说,人们专门将这面旗帜设置为“#34; arm"确保使用32位指令构建。当然,只有在为arm架构构建时,此标志才有意义。

另一方面,当你想为不同的架构(如armeabi- *或x86等)构建时,APP_ABI是一个正确的标志。

有关详细信息,请参阅Android.mk

的文档