Порты STL официально доступны в Android NDK начиная с версии r5 .
Его можно использовать как статическую или разделяемую библиотеку. Следующие реализации доступны предварительно с NDK:
- STLport , на основе v5.2.0:
- static
stlport_static
: используйте, если в вашем проекте только одна динамическая библиотека.
- dynamic
stlport_shared
: использовать, если в вашем проекте более одной динамической библиотеки.
- GNU libstdc ++
system
(статическая библиотека)
Рекомендованный, простой способ использовать его во время сборки - определить APP_STL в Application.mk, например:
APP_STL := stlport_static
И если вы хотите перестроить его (это , а не необходимо), определите STLPORT_FORCE_REBUILD в вашем Application.mk:
STLPORT_FORCE_REBUILD := true
Также доступна среда модульного тестирования для STLport.
Текущие ограничения для STLport :
- C ++ Исключения не поддерживаются
- RTTI не поддерживается
- «Возможные ошибки» в поддержке
wchar_t
и локалей
Различные ссылки:
Документация доступна в пакетах NDK в следующих местах (может быть больше):
- docsCPLUSPLUS-SUPPORT.html
- Источники / CXX-СТЛ / STLport
- Источники / CXX-СТЛ / гну-libstdc ++
Скачать NDK + документы здесь ; файл ошибок здесь
Ниже приведен отрывок из документа / CPLUSPLUS-SUPPORT.html (из документа NDK, r5)
III. Выбор стандартной реализации библиотеки C ++:
По умолчанию заголовки и библиотеки для минимальной среды выполнения C ++
библиотека (/system/lib/libstdc++.so) используется при создании исходных текстов C ++.
Однако вы можете выбрать другую реализацию, установив переменную
APP_STL для чего-то еще в вашем Application.mk, например:
APP_STL: = stlport_static
Чтобы выбрать статическую реализацию STLport, предоставляемую с этим NDK.
Значения APP_STL имеют следующие значения:
system -> Использовать стандартную минимальную библиотеку времени выполнения C ++.
stlport_static -> Использовать STLport как статическую библиотеку.
stlport_shared -> Использовать STLport как общую библиотеку.
ВНИМАНИЕ: ВАЖНАЯ ПЕРЕВОЗКА
AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
MODULES THAT USE IT.
ПРЕДУПРЕЖДЕНИЕ: КОНЕЦ ВАЖНОЙ ПЕРЕДАЧИ
"stlport_shared" предпочтительнее, если у вас есть несколько общих библиотек в вашем
проект, который использует C ++ STL, потому что он избегает дублирования функций
и, что более важно, глобальных переменных (например, std :: cout) в каждой из
их, которые могут иметь удивительные результаты.
С другой стороны, вам придется загружать его явно при запуске
приложение, как в следующем примере:
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("foo");
System.loadLibrary("bar");
}
Где и "libfoo.so", и "libbar.so" зависят от "libstlport_shared.so".
Обратите внимание, что имя общей библиотеки, если "libstlport_shared.so", чтобы избежать
конфликты имен с определенными образами системы Android, которые включают
системный уровень libstlport.so (который не является ABI-стабильным и
нельзя использовать из машинного кода, сгенерированного NDK).
"stlport_static" предпочтительнее, если у вас есть только одна общая библиотека в вашем
проект: только те функции и переменные STL, которые вам действительно нужны
связан с вашим машинным кодом, уменьшая его размер, и вам не понадобится
загрузить динамический stlport_shared при запуске.
IV. Вопросы, связанные с STLport:
Этот NDK предоставляет готовые статические и общие библиотеки для STLport,
но вы можете заставить его быть восстановлен из источников, определив следующее
в вашей среде или в вашем Application.mk перед сборкой:
STLPORT_FORCE_REBUILD := true
STLport лицензируется по лицензии BSD-типа с открытым исходным кодом. Увидеть
sources / cxx-stl / stlport / README для более подробной информации о библиотеке.
V. Планы на будущее:
- Сделать STLport совместимым с исключениями C ++ и RTTI
- Полная поддержка GNU libstdc ++
- Поддержка uSTL?