【发布时间】:2013-01-10 00:31:39
【问题描述】:
我不知道如何在我的 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'
我的 cpp 文件中有 #include <memory>。现在 Eclipse 告诉我 Unresolved inclusion: <memory>,但对于 <vector> 和 <string> 我得到了同样的结果,而且它们似乎编译和工作得很好。
Android NDK 中包含的工具链中是否没有实现智能指针?
如果不是,为什么不呢?由于 GCC 和 clang 支持智能指针已经有一段时间了,这意味着我要么遗漏了一些东西,要么 Android 开发人员出于某种原因禁用了它们。
有什么线索吗?
【问题讨论】:
-
你确定它不会编译,还是只是编辑器没有解决包含?无论如何,问题肯定是它指向旧的头目录……我记得我有这个,但我不再使用 CDT 构建了。
-
不仅仅是编辑器没有解决包含问题。它也没有编译。但它确实为
和 引用编译,即使编辑器也无法解析它们。对于我的项目,gnuc++ 包含目录指向 /android-ndk-r8d/platforms/android-14/arch-arm/usr/include -
应该有另一个以
c++/结尾的包含目录。另外,“Android NDK 中包含的工具链中是否没有实现智能指针?” — 据我所知,GCC 4.7 不包含在 Android NDK 中。你具体用的是什么? -
根据developer.android.com/tools/sdk/ndk/index.html,他们将 GCC 4.7 编译器添加到 r8d:"- 将 GNU Compiler Collection (GCC) 4.7 编译器添加到 NDK"。当我添加
/android-ndk-r8d/sources/cxx-stl/stlport/stlport或/android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include时,我现在可以编译了!但是,我仍然收到 IDE 错误,提示无法解析各种符号。 -
您必须使用索引器设置来选择它使用的工具链/目标设置。
标签: c++ gcc c++11 android-ndk smart-pointers