USTL или STLPort для Android? - PullRequest
       19

USTL или STLPort для Android?

31 голосов
/ 30 октября 2009

Я работаю с Android NDK, и так как он в настоящее время не поддерживает STL, мне было интересно, есть ли какие-нибудь блестящие люди, которые добились успеха с этим или знают, что лучше подходит для платформы Android : uSTL или STLPort.

EDIT: Похоже, что другой вариант может быть CrystaX .NET .

С их сайта:

... индивидуальный дистрибутив Android NDK R3, из которого я восстановил официальные источники. Поддержка C ++ исключения, RTTI и Стандарт C ++ Библиотека добавлена.

Ответы [ 6 ]

33 голосов
/ 17 декабря 2010

Порты 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?
9 голосов
/ 13 декабря 2010

STLport поддерживается с Android2.3 теперь !!!

9 голосов
/ 30 октября 2009

Недавно я натолкнулся на несколько вспомогательных скриптов и порт STLport для Android от Джона Рипли.

Есть также связанный блог с инструкциями по настройке .

Полагаю, это может облегчить работу с STLport.

9 голосов
/ 30 октября 2009

Просто отметьте, что uSTL немного отличается от стандарта. Например, он предполагает кодировку UTF-8 для std :: string. Тем не менее выглядит интересно, хотя ...

3 голосов
/ 05 ноября 2010

Так я настроил STLPort для работы с Android Froyo.

// The code
// The set of definitions and includes for STLPort
// They used defined() instead of #ifdef.
#define _STLP_HAS_INCLUDE_NEXT  1
#define _STLP_USE_MALLOC   1
#define _STLP_USE_NO_IOSTREAMS  1
#include <stl/config/_android.h>
#include <map>
#include <string>

// Android.mk
# For Android STL support
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport

Andrew

0 голосов
/ 03 декабря 2010

Обратите внимание, что упоминание о репозитории git в ссылке из ответа Степана Райко больше не существует. Альтернативные источники находятся на anddev и, через git, на git: //stlport.git.sourceforge.net/gitroot/stlport/stlport. Я обнаружил последнее при более длительном обсуждении использования как stlport, так и boost под Android.

С тех пор, как я впервые ответил на этот вопрос, я заставил anddev STLPort работать с моей библиотекой, которая также вызывает boost, включая проблемный shared_ptr. Подробнее о моем решении см. этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...