31 votes

uSTL ou STLPort pour Android?

Je travaille avec le Android NDK, et depuis, il ne prend pas actuellement en charge de la STL, je me demandais s'il y a des gens brillants qui ont eu du succès avec cette, ou de savoir qui est le mieux adapté pour la plateforme Android: uSTL ou STLPort.

Merci!

EDIT: Ressemble à une autre option peut être CrystaX .NET.

À partir de leur site web:

...personnalisé de distribution d'Android NDK r3 que j'ai reconstruit à partir de des sources officielles. Support de C++ les exceptions, RTTI et C++Standard Bibliothèque ajouté.

33voto

Stéphane Points 3629

Les Ports de la STL sont officiellement disponible dans l'Android NDK à partir de la version r5sur. Il peut être utilisé soit comme un statique ou la bibliothèque partagée. Les implémentations suivantes sont disponibles prêts à l'emploi avec le NDK :

  • STLport, basée sur la v5.2.0 :
    • statique stlport_static : utiliser si vous avez seulement une bibliothèque dynamique dans votre projet.
    • dynamiques stlport_shared : à utiliser si vous avez plus d'une bibliothèque dynamique dans votre projet.
  • GNU libstdc++ system (bibliothèque statique)

Le recommandé, facile à utiliser au moment de la construction est par définition APP_STL dans l'Application.mk, comme ceci :

APP_STL := stlport_static

Et si vous souhaitez reconstruire (ce n'est pas nécessaire), de définir STLPORT_FORCE_REBUILD dans votre Application.mk :

STLPORT_FORCE_REBUILD := true

Le toolkit unit test framework pour STLport est également disponible.

Les limitations actuelles pour STLport :

  • Les Exceptions C++ non pris en charge
  • RTTI pas pris en charge
  • "Probable bugs" pour appuyer wchar_t et locales

Différents Liens :

La Documentation est disponible dans le NDK paquets dans les endroits suivants (peut être plus) :

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

Télécharger NDK + docs ici ; fichier bugs ici


Ci-dessous est un extrait de l'docs/CPLUSPLUS-SUPPORT.html (à partir de NDK docs, r5)

III. La sélection de la Norme C++ de la Bibliothèque de la mise en Œuvre:

Par défaut, les en-têtes et les bibliothèques pour les minimes C++ runtime système bibliothèque (/system/lib/libstdc++.donc) sont utilisés lors de la construction de sources C++.

Vous pouvez cependant choisir une mise en œuvre différente en définissant la variable APP_STL à quelque chose d'autre dans votre Application.mk, par exemple:

APP_STL := stlport_static

Pour sélectionner la statique STLport de mise en œuvre fournis avec le NDK. Valeur APP_STL valeurs sont les suivantes:

système -> Utiliser la valeur par défaut minime C++ runtime library. stlport_static -> Utiliser STLport construit comme une bibliothèque statique. stlport_shared -> Utiliser STLport construit comme une bibliothèque partagée.

AVERTISSEMENT: MISE EN GARDE 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.

AVERTISSEMENT: FIN DE LA MISE EN GARDE IMPORTANTE

"stlport_shared" est préférable si vous avez plusieurs bibliothèques partagées dans votre projet d'utiliser le C++ STL, car il évite la duplication des fonctions et le plus important de variables globales (par exemple std::cout) dans chacun de eux, ce qui peut avoir des résultats surprenants.

D'autre part, vous devez le charger explicitement lors du démarrage de votre d'application, comme dans l'exemple suivant:

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

Où "libtruc.si" et "libbar.donc" dépendent "libstlport_shared.donc".

Notez que la bibliothèque partagée du nom si "libstlport_shared.donc," afin d'éviter nom des conflits avec certains Android système d'images qui comprennent un au niveau du système libstlport.(ce qui arrive à ne pas être ABI stable et ne peut être utilisé à partir de NDK généré par le code machine).

"stlport_static" est préférable si vous n'avez qu'une bibliothèque partagée dans votre projet: uniquement de la STL de variables et de fonctions dont vous avez réellement besoin sera lié à votre code machine, réduire la taille du code, et vous n'aurez pas besoin pour charger la dynamique stlport_shared au démarrage.

IV. STLport-questions spécifiques:

Cette NDK prêtes à l'emploi qui fournit les bibliothèques statiques et partagées pour STLport, mais vous pouvez le forcer à être reconstruit à partir de sources en définissant les éléments suivants dans votre environnement ou de votre Application.mk avant de construire:

STLPORT_FORCE_REBUILD := true

STLport est distribué sous une licence de type BSD licence open-source. Voir sources/cxx-stl/stlport/README pour plus de détails au sujet de la bibliothèque.

V. Projets Pour L'Avenir:

  • Faire STLport compatible avec les exceptions C++ et RTTI
  • Plein GNU libstdc++ support
  • uSTL en charge?

9voto

Nemanja Trifunovic Points 17239

Notez simplement que uSTL s'écarte un peu de la norme. Par exemple, il suppose un codage UTF-8 pour std :: string. Cela semble toujours intéressant, cependant ...

9voto

Stjepan Rajko Points 586

J'ai récemment rencontré des scripts d'aide et un portage de STLport pour Android , par John Ripley.

Il existe également un article de blog connexe avec des instructions sur la façon de le configurer .

Je suppose que cela pourrait faciliter l'utilisation de STLport.

9voto

jsding Points 106

STLport supporté depuis Android2.3 maintenant !!!

3voto

Andrew Points 31

c'est ainsi que j'ai configuré STLPort pour fonctionner avec 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X