【问题标题】:Android NDK: Hardware float point for ARMv6Android NDK:ARMv6 的硬件浮点数
【发布时间】:2012-12-09 21:06:15
【问题描述】:

我知道 android 支持 ARMv5TEARMv7a CPU。 (armeabiareabi-v7a 文件夹) 大多数 Android 手机的 CPU 现在是 ARMv6 不带 VFPARMv6VFPARMv7VFP

我的应用程序有物理模拟,我希望只针对具有硬件浮点的设备。 (VFP)。我不希望支持没有VFP 的设备。

如何配置 NDK 项目以将 ARMEABI 代码编译为 ARMv6VFP 而不是 ARVv5TE

上传APK时,我可以通过Google Play界面在没有VFPARmv5设备的情况下阻止旧的ARMv6

【问题讨论】:

  • 如何通过 Google Play 阻止没有 VFP 和 ARMv5 的旧 ARMv6? (因处理器型号而一一排除?)
  • 我们没有。如果您愿意,您可以阻止每个设备,但没有这样的设备。 HTC英雄还有什么? HTC 这里没有OpenGL ES 2.0 我们用的是OpenGL ES 2.0 所以已经被OpenGL ES 2.0 挡住了

标签: android android-ndk arm


【解决方案1】:

NDK 并没有真正提供任何方便的方法来更改默认构建选项。您只能添加其他标志,但不能覆盖标准选项。

默认 LOCAL_CFLAGS 和大多数其他选项对您不起作用,因为 NDK 将其选项放在您的选项之后并覆盖您的标志。我知道的唯一解决方案是在Application.mk 中定义全局APP_CFLAGS。因此,以下应该会导致针对具有 VFPv2 的 armv6 优化的二进制文件:

APP_CFALGS += -march=armv6 -mno-soft-float -mfloat-abi=softfp -mfpu=vfp

另外,如果我没记错的话,armv6 硬件上的 vfp 指令需要在 arm 模式下编译您的代码(而不是 thumb)。为Android.mk 中的每个目标指定LOCAL_ARM_MODE := arm 以实现此目的。

顺便说一句,我认为您不会对 armv6 设备的性能感到满意。即使是最新的高端 armv7 处理器,其速度也比现代英特尔酷睿 CPU 慢 10 倍左右。

【讨论】:

  • 您能否提供一些有关 Intel 与 ARM 性能争论的报告?
  • ARMv7 并不比 Intel Core 2 慢 10 倍。软件中的 ARM 浮点运行速度比使用 VFP 的 ARM 慢 10+。
猜你喜欢
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2011-02-02
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多