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

Как скомпилировать код С++ 11 с помощью android ndk и eclipse?

Я использую android NDK r8d и eclipse Juno. Я пытаюсь скомпилировать код С++, который использует С++ 11, например, mutex, lock_guard, shared_ptr и т.д. В собственном проекте андроида в eclipse.

Я получаю такие ошибки, как:

"error: 'shared_ptr' не является членом 'std'"

"фатальная ошибка: mutex: нет такого файла или каталога"

Я столкнулся с аналогичным вопросом здесь. Кажется, они работают для них, но объяснение там не завершено, поэтому я не могу заставить его работать для меня.

Я добавил "NDK_TOOLCHAIN_VERSION=4.7" в файл Application.mk и "LOCAL_CFLAGS += -std=c++11" to Android.mk. Тем не менее, он не компилируется.

В приведенной выше ссылке говорится:

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

Как и где его вставить?

Я также получаю ошибки в Eclipse IDE (в исходном коде перед компиляцией). Я знаю, что я должен определить "__GXX_EXPERIMENTAL_CXX0X__", чтобы решить их, но я просто не знаю, куда его поместить.

Итак, если кто-то может опубликовать ответ с полным объяснением того, как скомпилировать и сделать работу eclipse с С++ 11, было бы здорово.

4b9b3361

Ответ 1

Относительно вашего первого вопроса:

  • Перейдите в Project > Properties > C/С++ General/Paths and Symbols

  • На вкладке "Включает" добавьте соответствующий каталог, например. /Андроид-NDK-R8d/источники/CXX-СТЛ/гну-libstdС++/4,7/включить

Относительно вашего второго вопроса, я также ищу ответ. Совершенно непонятно, как определить макрос GXX_EXPERIMENTAL_CXX0X в Eclipse.

Некоторые говорят, что он должен быть "добавлен в качестве предопределенного макроса для индексатора", но похоже, что мы оба не смогли найти способ реализовать это...

Я читал в другом месте, что его следует добавить в "C/С++ General/Paths and Symbols/Symbols/GNU С++", но я не могу найти часть "Символы/GNU С++" в моей версии Indigo.

Ответ 2

Я нахожу экспортировать переменную среды NDK_TOOLCHAIN_VERSION = 4.8, прежде чем я запустил eclipse, может решить эту проблему.

Eclipse использует ndk по умолчанию toolchain версии 4.6, если NDK_TOOLCHAIN_VERSION не определяет, и gcc, если эта версия не поддерживает все будущие С++ 11, такие как многопоточность и т.д.