На какую примерно версию GCC можно ориентироваться?
Можно ли свободно использовать STL?
И есть ли более подробный список ограничений?
Просто где-то год назад, когда попытался скомпилировать довольно простой код для Android 1.6 — получил миллиард ошибок, в том числе из-за отсутствия STL в комплекте.
NDK r5 (текущая версия) использует для сборки проектов gcc 4.4.3 (по умолчанию) и gcc 4.4.0 (можно включить при необходимости).
Можно использовать две версии STL: STLPort и GNU STL. Никаких серьезных проблем при портировании больших проектов не встречалось.
Полностью или частично недоступны: RTTI (полностью), исключения C++ (в использующих STL модулях), wchar_t (появился только начиная с Android 2.3 Gingerbread, не рекомендуется Google для использования в новом коде).
В целом, ощущения от NDK очень позитивные. Все работает.
Спасибо за развернутый ответ.
Не очень только понимаю, что плохого в wchar_t, наш проект его активано использует, а UTF8 далеко не всегда удобен.
Судя по всему пришла пора попробовать сделать портирование на 2.3 и 3.0+, судя по вышеописанным ограничениям, должно сработать.
RTTI и исключения доступны и работают в реальном большом проекте. Никаких трудностей с ними пока замечено не было. Для включения добавляем в Application.mk вот такие строчки, как и показано выше:
В текущем NDK r5c присутствуют следующие toolchain'ы:
arm-linux-androideabi-4.4.3 (по умолчанию)
arm-eabi-4.4.0
Проверьте, пожалуйста, еще раз версию gcc, которую вы используете.
Версия 4.3.4 очень старая по меркам gcc.
Даже используемая сейчас 4.4.3 на самом деле далека от совершенства потому как, например, отвратительно работает с NEON intrinsics
(2) Про RTTI и исключения
Насколько я знаю исключения и RTTI доступны только при использовании GNU STL.
При использовании STLPort ими пользоваться нельзя.
Могу только похвалить за то, что используете подмножество STL доступное и там и там.
В проектах, анализом которых я занимался, STLPort был жизненно необходим. Со всеми вытекающими.
Рекомендую обратиться к презентации моего коллеги Ларса Бишопа о нашем опыте портирования больших игровых проектов на платформу Android: Bringing High-end 3D Games to Android
Быстрая сборка С++ библиотек под Андроид