uSTL o STLPort para Android?


Estoy trabajando con el NDK de Android, y dado que actualmente no es compatible con el STL, me preguntaba si hay alguna gente brillante por ahí que haya tenido éxito con esto, o saber cuál es el más adecuado para la plataforma Android: uSTL o STLPort.

EDITAR: Parece que otra opción puede ser CrystaX. NET .

Desde su sitio web:

...distribución personalizada de Android NDK r3 que he reconstruido de fuentes oficiales. Soporte de C++ excepciones, RTTI y C++estándar Biblioteca añadida.

6 answers

STLPort soportado desde Android2. 3 ahora!!!

 9
Author: jsding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 14:08:50

Los puertos de STL están oficialmente disponibles en Android NDK a partir de la versión r5 en. Se puede utilizar como una biblioteca estática o compartida. Las siguientes implementaciones están disponibles precompiladas con el NDK:

  • STLPort , basado en v5. 2. 0 :
    • static stlport_static: úselo si solo tiene una biblioteca dinámica en su proyecto.
    • dynamic stlport_shared: para usar si tiene más de una biblioteca dinámica en su proyecto.
  • GNU libstdc++ system (biblioteca estática)

La forma fácil y recomendada de usarlo en el tiempo de compilación es definiendo APP_STL en el Application.mk, así :

APP_STL := stlport_static

Y si desea reconstruirlo (esto es no necesario), defina STLPORT_FORCE_REBUILD en su Application.mk :

STLPORT_FORCE_REBUILD := true

El marco de pruebas unitarias para STLPort también está disponible.

Limitaciones actuales para STLPort :

  • Excepciones de C++ no soportadas
  • RTTI no soportado
  • "Errores probables" en soporte para wchar_t y locales

Varios Enlaces :

La documentación está disponible en los paquetes NDK en las siguientes ubicaciones (puede haber más):

  • docsCPLUSPLUS-SOPORTE.html
  • sources/cxx-stl / stlport
  • sources/cxx-stl / gnu-libstdc++

Descargar NDK + docs aquí ; errores de archivo aquí


A continuación se muestra un extracto de docs / CPLUSPLUS-SOPORTE.html (de NDK docs, r5)

III. Selección de la Implementación de la Biblioteca Estándar de C++:

De forma predeterminada, los encabezados y las bibliotecas para el sistema de tiempo de ejecución mínimo de C++ la biblioteca (/system/lib / libstdc++.so) se utiliza cuando se construyen fuentes de C++.

Sin embargo, puede seleccionar una implementación diferente configurando la variable APP_STL a otra cosa en su Application.mk por ejemplo:

APP_STL: = stlport_static

Para seleccionar la estática Implementación de STLPort proporcionada con este NDK. Value APP_STL los valores son los siguientes:

System -> Use la biblioteca de tiempo de ejecución mínima predeterminada de C++. stlport_static - > Use STLPort construido como una biblioteca estática. stlport_shared - > Utilice STLPort construido como una biblioteca compartida.

ADVERTENCIA: ADVERTENCIA IMPORTANTE

 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.

ADVERTENCIA: FIN DE LA ADVERTENCIA IMPORTANTE

Se prefiere"stlport_shared" si tiene varias bibliotecas compartidas en su proyecto que utiliza el C++ STL, porque evita la duplicación de funciones y lo más importante de las variables globales (por ejemplo, std::cout) en cada uno de ellos, que pueden tener resultados sorprendentes.

Por otro lado, tendrá que cargarlo explícitamente al iniciar su aplicación, como en el siguiente ejemplo:

 static {
     System.loadLibrary("stlport_shared");
     System.loadLibrary("foo");
     System.loadLibrary("bar");
 }

Donde ambos "libfoo.so" y "libbar.so" depende de "libstlport_shared.so".

Tenga en cuenta que el nombre de la biblioteca compartida si "libstlport_shared.so" para evitar conflictos de nombres con ciertas imágenes del sistema Android que incluyen un nivel del sistema libstlport.so (que pasa a no ser ABI-estable y no se puede utilizar desde el código de máquina generado por NDK).

Se prefiere"stlport_static" si solo tiene una biblioteca compartida en su proyecto: solo las funciones y variables STL que realmente necesita serán enlazado a su código de máquina, reduciendo su tamaño de código, y usted no necesitará para cargar el stlport_shared dinámico al inicio.

IV. STLPort-specific cuestiones:

Este NDK proporciona bibliotecas estáticas y compartidas prediseñadas para STLPort, pero puede forzar que se reconstruya a partir de fuentes definiendo lo siguiente en su entorno o su Application.mk antes de construir:

STLPORT_FORCE_REBUILD := true

STLPort está licenciado bajo una licencia de código abierto estilo BSD. Ver sources / cxx-stl/stlport / README para más detalles sobre la biblioteca.

V. Planes futuros:

  • Hacer STLPort compatible con excepciones de C++ y RTTI
  • GNU completo compatibilidad con libstdc++
  • ¿Soporte uSTL?
 33
Author: Stéphane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-20 22:51:33

Solo tenga en cuenta que uSTL se desvía bastante del estándar. Por ejemplo, asume la codificación UTF-8 para std:: string. Aunque parece interesante...

 9
Author: Nemanja Trifunovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-30 17:41:19

Recientemente me encontré con algunos scripts de ayuda y un puerto de STLPort para Android, por John Ripley.

También hay una entrada de blog relacionada con con instrucciones de cómo configurarlo.

Supongo que eso podría hacer que sea más fácil ir con STLPort.

 9
Author: Stjepan Rajko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-30 20:00:06

Así es como configuré STLPort para que funcione con 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

 3
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-05 16:44:13

Tenga en cuenta que la mención del repositorio git en el enlace de la respuesta de Stjepan Rajko ya no existe. Las fuentes alternativas están en anddev y, a través de git, en git://stlport.git.sourceforge.net/gitroot/stlport/stlport. Encontré este último en una discusión más larga de usar tanto stlport como boost en Android.

Desde la primera respuesta a esta pregunta, he conseguido que anddev STLPort funcione con mi biblioteca que también llama a boost, incluyendo el problemático shared_ptr. Para los detalles de mi solución ver esta pregunta.

 0
Author: Gamma Draconis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:15