gpt4 book ai didi

android - std::chrono with NDK r10e 无法解析

转载 作者:行者123 更新时间:2023-11-30 02:32:57 27 4
gpt4 key购买 nike

不要以为我没有搜索,我的 Android 项目(在 Eclipse 上)拒绝识别 std::chrono 库。我的头文件中包含 OK:

#include <chrono>

但是当我想使用它的时候:

using namespace std::chrono;

我有一个问题:无法解析符号“chrono”,chrono 的所有功能都不可用。所以我使用 NDK r10e,在我的 Application.mk 中添加了一些行,现在看起来像这样:

APP_PLATFORM := android-22
APP_STL := gnustl_static
APP_CPPFLAGS := -std=gnu++11
NDK_TOOLCHAIN_VERSION := 4.8

在我的 Android.mk 中,我添加:

LOCAL_CFLAGS += -std=gnu++11

它没有解决我的问题。有任何想法吗 ? Eclipse 配置错误?在修改 mk 文件后,我构建并重新构建了我的项目。

最佳答案

这是 Android NDK 中 GNU libstdc++ 的已知问题。它建立在非常有限的 libc(Google 的 Bionic)之上,因此无法提供完整的 C++ 标准库功能。特别是,std::chrono 在构建时几乎完全被禁用,但不仅限于 std::chrono。还有许多其他类和函数被禁用,因此 Google 的 NDK 只是不完全支持 C++。

您可以切换到 LLVM libc++ (APP_STL := c++_static),但它在 Google 的 Android NDK 中处于实验状态并且实际上不稳定(即它会导致应用程序崩溃,即使完全标准 C++ 代码)。这种不稳定性是由与 GNU libstdc++ 相同的原因引起的 - 即因为它建立在非常有限的 libc 之上。

我建议切换到 CrystaX NDK - Google 的 Android NDK 的替代分支,我开始主要解决 Google 的 NDK 问题,例如 libc、libc++ 等的非标准实现。CrystaX NDK 被开发为作为 Google NDK 的直接替代品(除了事实上,它提供了完全符合标准的低级库)。在 CrystaX NDK 中,GNU libstdc++ 和 LLVM libc++ 都更加稳定并完全符合 C++ 标准,至少与它们在 GNU/Linux 上的符合程度相同。特别是,std::chrono 在那里完全实现并且工作得很好。此外,在 CrystaX NDK 中,您可以使用更新的编译器,例如 gcc-5.3 和 clang-3.7,更好地支持 C++11 和 C++14。如果对你有帮助我会很高兴。

关于android - std::chrono with NDK r10e 无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35887998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com