13

我不知道如何在我的 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_sharedC gnustl_shared++ 运行时库。
我试过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 开发人员出于某种原因禁用了它们。
有什么线索吗?

4

2 回答 2

7

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

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

于 2013-01-26T03:11:11.807 回答
4

这些设置为我做到了:

应用程序.mk:

NDK_TOOLCHAIN_VERSION=4.7
APP_STL := gnustl_static

安卓.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
于 2013-09-21T19:30:09.290 回答