Я пытаюсь использовать полный C ++ NDK 5 gnustl:
Состояния CPLUSPLUS-SUPPORT.html
:
Набор инструментов NDK поддерживает исключения C ++, поскольку NDK r5, однако все C ++исходники компилируются с поддержкой -fno-excptions по умолчанию, в целях совместимости с предыдущими выпусками.
Чтобы включить его, используйте флаг компилятора C ++ '-fexceptions'.Это можно сделать, добавив следующее к каждому определению модуля в вашем Android.mk:
LOCAL_CPPFLAGS += -fexceptions
Проще говоря, добавьте одну строку в Application.mk, настройка автоматически будет применена ко всем NDK вашего проекта.modules:
APP_CPPFLAGS += -fexceptions
sources/cxx-stl/gnu-libstdc++/README
состояния:
Этот каталог содержит заголовки и готовые двоичные файлы для реализации стандартной библиотеки шаблонов GNU libstdc ++ - v3 C ++.
Они генерируются из источников набора инструментов скриптом rebuild-all-prebuilt.sh в build / tools.
Чтобы использовать его, определите APP_STL для gnustl_static в Application.mk.См. Docs / CPLUSPLUS-SUPPORT.html для получения более подробной информации.
Эта реализация полностью поддерживает исключения C ++ и RTTI.
Но все попытки с использованием исключений заканчиваются неудачей.Альтернативный NDK существует на http://www.crystax.net/android/ndk-r4.php. Использование примера hello-jni из этого NDK не работает.Компиляция с NDK 5 работает после создания Application.xml
с
APP_STL := gnustl_static
. Установка APP_STL на gnustl_static
также автоматически включает -frtti
и -fexceptions
.Но он умирает той же ужасной смертью, что и мои собственные эксперименты.
Мне удалось получить минимальный пример кода, который дает сбой для меня:
try {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","trhown!");
throw "Wrong object type.";
} catch (char* b) {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","catched!");
}
Я что-то упускаю или это утверждение в README
и CPLUSPLUS-SUPPORT.html
простопросто неправильно?