Настройка C ++ 11 (std :: thread) для NDK с помощью ADT / Eclipse

Я пытался использовать C ++ 11. Я разрабатываю проект Android, и я хочу использовать std :: mutex. Наряду с OpenCV Но независимо от того, что я делаю, я просто не могу исправить ошибку Type 'mutex' could not be resolved .

Я пробовал следовать инструкциям, которые я нашел в SO и других местах. LINK1 LINK2 LINK3 LINK4

  1. ADT v22.3.0-887826
  2. Установленные компиляторы C / C ++ (CDT)

После стольких учебных уроков он стал настоящим беспорядком. Поэтому я объясню свои текущие настройки

  • Проект> Свойства> C / C ++ Build> Редактор цепочки инструментов
    • Текущая цепочка инструментов – «Cross GCC»
    • Текущий Builder – «Android Builder»
  • Project> Свойства> C / C ++ Build> Параметры обнаружения

    • Команда вызова компилятора – "gcc"
    • Сводные выражения Compilter: -E -P -v -dD "$ {plugin_state_location} /specs.c -std = c ++ 11"
  • Project> C / C ++ Общие> Контуры и символы> вкладка «Символы»

    • Символ = __cplusplus и значение = 1

В моем файле Application.mk у меня есть следующее

 APP_STL := gnustl_static APP_USE_CPP0X := true APP_CPPFLAGS := -std=c++11 -frtti -fexceptions APP_ABI := armeabi-v7a APP_PLATFORM := android-8 

Я попытался изменить значение символа cplusplus на 201103L и попытался __GXX_EXPERIMENTAL_CXX0X с пустым значением

Но ничего не работает, что я делаю неправильно?

Любая помощь приветствуется!

Solutions Collecting From Web of "Настройка C ++ 11 (std :: thread) для NDK с помощью ADT / Eclipse"

Поддержка std::thread немного особенная. Этот вопрос рассматривается, например, в этой статье Binglong . Статья очень короткая, но ее можно резюмировать в одном предложении:

Вы не можете использовать (по умолчанию) gcc 4.6 toolchain, если вы хотите #include <thread> или #include <mutex> .

Итак, добавьте NDK_TOOLCHAIN_VERSION=4.8 или NDK_TOOLCHAIN_VERSION=clang к вашему Application.mk .

Чтобы ADT правильно перестроил свой Индекс , см. Сборку Android NDK, метод не может быть разрешен или Eclipse успешно компилируется, но все же дает семантические ошибки .

В Android.mk добавьте LOCAL_CPPFLAGS := -std=c++11 -D __cplusplus=201103L затем перестройте свой проект (для реконфигурации компилятора). После восстановления ваш проект автоматически добавляет необходимый stl-путь в Path и Symbols

Если вы обновите NDK или установите новую версию Android Studio (2.1 на момент написания) и Android Studio загрузите NDK для вас, вы получите ревизию 12 – у которой есть много std :: define, не определенных в \ ndk -bundle \ sources \ cxx-stl \ gnu-libstdc ++ \ 4.9 \ libs \ armeabi-v7a \ include \ bits \ c ++ config.h – относящиеся к потоковой передаче, такие как _GLIBCXX_HAS_GTHREADS, который скрывает класс потока в "thread" для пример.

В нем говорится, что после пересмотра 10е gcc устарел. И с этим все определения, как упоминалось, – которые тщательно искажают наш зависящий от потока JNI-код.

Clang, как было предложено в других сообщениях, не является для нас решением, поскольку, среди прочего, похоже, что это не поддержка thead_local. Решение состоит в том, чтобы вернуться к пересмотру 10e – который вы можете найти по адресу:

dl.google.com/android/ndk

Извлеките пакет и скопируйте его в каталог sdk / ndk-bundle – сначала удалите исходную версию 12.