c++ - 智能指针不适用于 Android NDK r8

标签 c++ gcc c++11 android-ndk smart-pointers

我不知道如何在我的 Android 项目中使用共享指针。我在带有 Android NDK r8d 的 Mac OS X 上使用最新的 Eclipse ADT。

这是我的 Android.mk 中的内容文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CPPFLAGS  := -std=c++11
LOCAL_MODULE    := native
LOCAL_SRC_FILES := native.cpp
include $(BUILD_SHARED_LIBRARY)

这是我的 Application.mk 中的内容文件:

NDK_TOOLCHAIN_VERSION=4.7
APP_STL := stlport_shared

我已经尝试过默认的 GCC 4.6、实验性 4.7 和 clang3.1 工具链。
我试过链接到 stlport_sharedgnustl_shared c++ 运行时库。
我试过 FLAGS -std=c++11 , -std=c++0x ,以及 -std=gnu++11 .

我能够使用 c++11 标准的 lambdas 和 auto,因此 C++11 标志似乎正在工作。但是,每当我尝试使用 shared_ptr、weak_ptr 或 unique_ptr 时,我都会收到错误 'suchandsuch_ptr' is not a member of 'std'

我有 #include <memory>在我的 cpp 文件中。现在 Eclipse 告诉我 Unresolved inclusion: <memory> ,但我对 <vector> 得到了同样的结果和 <string>并且那些似乎编译和工作都很好。

Android NDK 包含的工具链中是否没有实现智能指针?
如果不是,为什么不呢?由于 GCC 和 clang 已经支持智能指针很长一段时间了,这意味着我要么遗漏了一些东西,要么 Android 开发人员出于某种原因禁用了它们。
有什么线索吗?

最佳答案

确保标准库包含路径(如 /android-ndk-r8d/sources/cxx-STL/gnu-libstdc++/4.7/include)在目标设置中。

要让 IDE 识别 GNU 标准库中的 C++11 类,请将 __GXX_EXPERIMENTAL_CXX0X__ 作为预定义宏添加到索引器。 (这个名字有点不合时宜,因为 C++11 是标准化的,并且支持不再是实验性的,但到目前为止还是这么称呼的。)另外,请确保索引器设置为反射(reflect)正确的构建目标。

关于c++ - 智能指针不适用于 Android NDK r8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532057/

相关文章:

c - 允许 ((int *)p)++ 的任何 gcc 选项

c++ - 如果我们使用参数构造函数,我们是否需要在 C++ 中提供默认构造函数?

C++ 异步 + future (延迟 vs 异步)

c++ - 如何知道 CWnd 滚动条是否可见?

java - 按位运算的结果是否取决于 Java 中的字节顺序?在 C 或 C++ 中呢?

c++ - 将基类指针转换为返回子类的 vector

python - 为什么 python.org OS X 安装程序是用 gcc-4.0 构建的?

c++ - 如何允许用户重新配置编译器以与 cmake 一起使用?

c++ - 为只接受函数的函数定义接口(interface)

c++ - 在 shared_from_this() 中 boost weak_ptr_cast