不要以为我没有搜索,我的Android项目(在Eclipse上)拒绝识别std :: chrono库。我的头文件中的include是正确的:
using namespace std::chrono;
但是当我想要使用它时:
APP_PLATFORM := android-22
APP_STL := gnustl_static
APP_CPPFLAGS := -std=gnu++11
NDK_TOOLCHAIN_VERSION := 4.8
我有一个:符号'chrono'无法解析,而chrono的所有功能都是不可用的。 所以我使用NDK r10e,我在Application.mk中添加了一些行,现在看起来像这样:
LOCAL_CFLAGS += -std=gnu++11
在我的Android.mk中,我添加:
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"require": {
"php": ">=5.4",
"zendframework/zendframework": "<=2.4.9",
"zendframework/zftool": "*",
"phpunit/phpunit": "4.7"
}
}
它没有解决我的问题。有任何想法吗 ?糟糕的Eclipse配置? 在mk文件中进行修改后,我构建并重新构建了我的项目。
答案 0 :(得分:3)
这是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 - 谷歌Android NDK的另一个分支,我开始主要解决谷歌的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。如果能帮助你,我会很高兴。