Подтвердить что ты не робот

Умные указатели, не работающие с Android NDK r8

Я не могу понять, как использовать общие указатели в моем проекте Android. Я использую последний Eclipse ADT в Mac OS X с 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 С++.
Я пробовал FLAGS -std=c++11, -std=c++0x и -std=gnu++11.

Я могу использовать lambdas и auto стандарта С++ 11, поэтому флаг С++ 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 по какой-то причине отключили их.
Любые подсказки?

4b9b3361

Ответ 1

Убедитесь, что стандартная библиотека включает путь (например, /android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include) в целевых настройках.

Чтобы IDE распознал классы С++ 11 в стандартной библиотеке GNU, добавьте __GXX_EXPERIMENTAL_CXX0X__ в качестве предопределенного макроса для индексатора. (Имя является немного анахронизмом, поскольку С++ 11 стандартизирован, и поддержка уже не является экспериментальной, но пока что то, что она называла.) Кроме того, убедитесь, что указатель настроен на отображение правильной цели сборки.

Ответ 2

эти настройки сделали это для меня:

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:\android\ndk\sources\cxx-stl\gnu-libstdc++\4.7\include
C:\android\ndk\sources\cxx-stl\gnu-libstdc++\4.7\libs\armeabi\include