智能指针不能与Android NDK r8一起使用

时间:2013-01-25 23:39:14

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

我无法弄清楚如何在我的Android项目中使用共享指针。我在Mac OS X上使用最新的Eclipse ADT和Android NDK r8d。

以下是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

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

我的cpp文件中有#include <memory>。现在Eclipse告诉我Unresolved inclusion: <memory>,但我对<vector><string>也有同样的看法,这些看起来很好。

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

这些设置适合我:

<强> Application.mk:

NDK_TOOLCHAIN_VERSION=4.7
APP_STL := gnustl_static

<强> Android.mk:

LOCAL_CFLAGS :=-D__GXX_EXPERIMENTAL_CXX0X__  <--important
LOCAL_CPPFLAGS  := -std=c++11

Eclipse设置: C / C ++ General \ Path和Symbols应该包含:

C:\android\ndk\sources\cxx-stl\gnu-libstdc++\4.7\include
C:\android\ndk\sources\cxx-stl\gnu-libstdc++\4.7\libs\armeabi\include