Comments 8
На какую примерно версию GCC можно ориентироваться?
Можно ли свободно использовать STL?
И есть ли более подробный список ограничений?
Просто где-то год назад, когда попытался скомпилировать довольно простой код для Android 1.6 — получил миллиард ошибок, в том числе из-за отсутствия STL в комплекте.
Можно ли свободно использовать 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 очень позитивные. Все работает.
Можно использовать две версии STL: STLPort и GNU STL. Никаких серьезных проблем при портировании больших проектов не встречалось.
Полностью или частично недоступны: RTTI (полностью), исключения C++ (в использующих STL модулях), wchar_t (появился только начиная с Android 2.3 Gingerbread, не рекомендуется Google для использования в новом коде).
В целом, ощущения от NDK очень позитивные. Все работает.
Спасибо за развернутый ответ.
Не очень только понимаю, что плохого в wchar_t, наш проект его активано использует, а UTF8 далеко не всегда удобен.
Судя по всему пришла пора попробовать сделать портирование на 2.3 и 3.0+, судя по вышеописанным ограничениям, должно сработать.
Не очень только понимаю, что плохого в wchar_t, наш проект его активано использует, а UTF8 далеко не всегда удобен.
Судя по всему пришла пора попробовать сделать портирование на 2.3 и 3.0+, судя по вышеописанным ограничениям, должно сработать.
RTTI и исключения доступны и работают в реальном большом проекте. Никаких трудностей с ними пока замечено не было. Для включения добавляем в Application.mk вот такие строчки, как и показано выше:
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
gcc в текущем NDK r5c вот такой:
$ gcc --version
gcc (GCC) 4.3.4 20090804 (release) 1
А про остальное ответил strikov.
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
gcc в текущем NDK r5c вот такой:
$ gcc --version
gcc (GCC) 4.3.4 20090804 (release) 1
А про остальное ответил strikov.
(1) Про gcc
В текущем 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 был жизненно необходим. Со всеми вытекающими.
В текущем 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
Что-то я не понимаю как Eclipse+Cygwin заставить видеть всю STL. Нужные флаги прописаны, но он в упор не видит всю библиотеку (, например).
Sign up to leave a comment.
Быстрая сборка С++ библиотек под Андроид