我无法弄清楚如何在我的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_shared
和gnustl_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开发者因某些原因禁用了它们。
有线索吗?
答案 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