【问题标题】:Android NDK and LOCAL_ARM_MODE flagAndroid NDK 和 LOCAL_ARM_MODE 标志
【发布时间】:2014-02-14 22:03:05
【问题描述】:

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

我还需要扩展此设置以构建 x86。从另一篇文章看来,使用“APP_ABI = all”是一个更好的解决方案。我只是想知道 LOCAL_ARM_MODE 是否也必须更改。这个标志到底有什么作用?

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

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

    LOCAL_ARM_MODE 可以设置为“arm”或“thumb”,默认为“thumb”。 “thumb”使用 16 位指令,而“arm”使用 32 位指令。 16 位指令更小,但对于某些性能关键的应用程序可能会很慢。这就是为什么对于某些库,人们专门将此标志设置为“arm”以确保使用 32 位指令进行构建。当然,这个标志只有在为 arm 架构构建时才有意义。

    另一方面,当您想要为 armeabi-* 或 x86 等不同架构进行构建时,APP_ABI 是正确切换的标志。

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

    【讨论】:

      【解决方案2】:

      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

      来源:Compile assembly code for ARM and X86

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 2011-08-06
        • 2015-08-28
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多