Android NDK和LOCAL_ARM_MODE标志

9

在我的当前Android本地代码构建设置中,Application.mk中定义了APP_ABI为armeabi-v7a。对于我正在构建的一些库,我发现在Android.mk中LOCAL_ARM_MODE被定义为arm。

我需要扩展此设置以构建x86版本。从另一篇帖子中得知,使用“APP_ABI = all”是更好的解决方案。我只是想知道是否也必须更改LOCAL_ARM_MODE。无论如何,这个标志是做什么用的呢?

2个回答

12

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

LOCAL_ARM_MODE 可以设置为 "arm" 或 "thumb",默认值为 "thumb"。 "thumb" 使用16位指令,而 "arm" 使用32位指令。 16位指令更小,但对于某些性能关键的应用可能会较慢。这就是为什么有些库中,人们特别将此标志设置为 "arm" 来确保使用32位指令进行构建的原因。当然,在构建为arm体系架构时,此标志才具有意义。

另一方面,APP_ABI 是正确的标志,可以在您想要构建不同体系结构(如armeabi-*或x86等)时切换。

有关更多信息,请阅读 Android.mk 的文档。


6
LOCAL_ARM_MODE可以用于定义你的应用程序所针对的平台。如果你想将Android.mk设置为x86,则只需在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

来源:为ARM和X86编译汇编代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接