我不知道如何在我的 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_shared
和 gnustl_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/