【问题标题】:std::round is not a member of std on androidstd::round 不是 android 上 std 的成员
【发布时间】:2017-02-25 18:57:53
【问题描述】:

我在为 Android 和 iOS 构建的 Qt 应用程序上使用来自 C++ 11 的 std::round。但是在android上,我得到的错误是 std::round is not a member of std 尽管包含 cmath 标头。

我怎样才能让std::round 在安卓上工作? std::round 有替代品吗?

以下是我的android环境:

ANDROID_NDK_PLATFORM = android-23
NDK version          = r13b
ANDROID_NDK_TOOLCHAIN_VERSION = 4.9

【问题讨论】:

  • 这是github.com/android-ndk/ndk/issues/82,仅供参考。
  • @DanAlbert 是否有即将发布的 NDK 版本将解决这些问题?
  • 正如 bug 所说,它计划用于 r15。在 tl;dr 的情况下,应该注意的是,这永远不会为 gnustl 修复,实际上会通过使 libc++ 足够可靠以使没有理由使用 gnustl 来“修复”。

标签: c++ qt c++11 android-ndk


【解决方案1】:

Android-NDK 中似乎缺少 cmath 标头中的一些函数,有关详细信息,请参阅 here

实现您自己的round 函数非常容易:

template<typename T>
T round(T v) {
  return int(v + 0.5);
}

或查看其他建议/实现here

【讨论】:

  • int(v + 0.5); 在很多情况下都会失败。学习代码可以,但不能用于生产代码。
【解决方案2】:

如何让 std::round 在安卓上工作?

(编辑:更新说明)

切换到 NDK r18 并删除 ANDROID_NDK_TOOLCHAIN_VERSION = 4.9 行,因为 gcc 现在已从 NDK 中完全删除,默认为 clang

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多