Android NDK和LOCAL_ARM_MODE标志

Pet*_*ter 8 android android-ndk

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

我需要扩展此设置以构建x86.从另一篇文章中可以看出,使用"APP_ABI = all"是一个更好的解决方案.我只是想知道是否还必须更改LOCAL_ARM_MODE.这面旗子到底是做什么的?

Ava*_*anz 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
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

尽管这是一篇过时的文章,但我只想指出,所接受的答案是不正确的。

LOCAL_ARM_MODE可以设置为“ arm”或“ thumb”,并且默认为“ thumb”。“ thumb”使用16位指令,而“ arm”使用32位指令。16位指令较小,但对于某些性能至关重要的应用程序可能较慢。这就是为什么对于某些库,人们专门将此标志设置为“ arm”以确保使用32位指令进行构建。当然,仅当您为手臂体系结构构建时,此标志才有意义。

另一方面,当您要为不同的体系结构(例如armeabi- *或x86等)构建时,APP_ABI是正确的标志。

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