Question

Je travaille avec le NDK Android et, comme il ne prend actuellement pas en charge la STL, je me demandais s'il y avait des gens brillants qui avaient eu du succès avec cela, ou qui étaient les mieux adaptés à la plateforme Android. : uSTL ou STLPort.

EDIT: Une autre option pourrait être CrystaX .NET .

À partir de leur site Web:

  

... distribution personnalisée d'Android   NDK r3 que j'ai reconstruit   sources officielles. Prise en charge de C ++   exceptions, RTTI et C ++ standard   Bibliothèque ajoutée.

Était-ce utile?

La solution

STLport pris en charge depuis Android2.3 maintenant!

Autres conseils

Les ports de STL sont officiellement disponibles dans le NDK Android à partir de la version r5 . Il peut être utilisé en tant que bibliothèque statique ou partagée. Les implémentations suivantes sont disponibles préconfigurées avec le NDK:

  • STLport , basé sur la v5.2.0:
    • static stlport_static : à utiliser si votre projet ne comporte qu'une bibliothèque dynamique.
    • dynamique stlport_shared : à utiliser si vous avez plusieurs bibliothèques dynamiques dans votre projet.
  • GNU libstdc ++ système (bibliothèque statique)

Le moyen facile et recommandé de l'utiliser au moment de la construction consiste à définir APP_STL dans Application.mk, comme suit:

APP_STL := stlport_static

Et si vous voulez le reconstruire ( ce n'est pas nécessaire), définissez STLPORT_FORCE_REBUILD dans votre Application.mk:

STLPORT_FORCE_REBUILD := true

Le cadre de tests unitaires pour STLport est également disponible.

Limites actuelles pour STLport :

  • Les exceptions C ++ non prises en charge
  • RTTI non pris en charge
  • " Bugs probables " en support de wchar_t et des environnements locaux

Liens divers:

La documentation est disponible dans les packages NDK aux emplacements suivants (il peut y en avoir d'autres):

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

Télécharger les documents NDK + ici ; bogues de fichier ici

Vous trouverez ci-dessous un extrait de docs / CPLUSPLUS-SUPPORT.html (de la documentation NDK, r5)

III. Sélection de l'implémentation de la bibliothèque standard C ++:

Par défaut, les en-têtes et les bibliothèques du système d’exécution minimal C ++ Les bibliothèques (/system/lib/libstdc++.so) sont utilisées lors de la construction de sources C ++.

Vous pouvez toutefois sélectionner une autre implémentation en définissant la variable APP_STL à quelque chose d'autre dans votre Application.mk, par exemple:

APP_STL: = stlport_static

Pour sélectionner l'implémentation STLport statique fournie avec ce NDK. Les valeurs APP_STL sont les suivantes:

système - > Utilisez la bibliothèque d'exécution C ++ minimale par défaut.    stlport_static - > Utilisez STLport construit en tant que bibliothèque statique.    stlport_shared - > Utilisez STLport construit comme une bibliothèque partagée.

AVERTISSEMENT: IMPORTANT CAVEAT

 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 CAVEAT IMPORTANT

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

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

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

Où les deux "libfoo.so" et "libbar.so" dépendre de & lib; rs; libstlport_shared.so ".

Notez que le nom de la bibliothèque partagée est " libstlport_shared.so " éviter   les conflits de noms avec certaines images du système Android qui incluent un   libstlport.so au niveau du système (qui se trouve ne pas être ABI-stable et   ne peut pas être utilisé à partir du code machine généré par NDK).

& st; stlport_static " est préférable si vous n’avez qu’une bibliothèque partagée dans votre   projet: seules les fonctions et variables STL dont vous avez réellement besoin seront   lié à votre code machine, réduisant sa taille, et vous n’aurez plus besoin de   charger le fichier stlport_shared dynamique au démarrage.

IV. Problèmes spécifiques à STLport:

Ce NDK fournit des bibliothèques prédéfinies statiques et partagées pour STLport, mais vous pouvez le forcer à être reconstruit à partir de sources en définissant ce qui suit dans votre environnement ou dans votre Application.mk avant de construire:

<*>

STLport est licencié sous

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

Je suis récemment tombé sur quelques scripts d'assistance et un port de STLport pour Android de John Ripley.

Il existe également un blog avec des instructions pour le configurer .

Je suppose que cela facilitera l'utilisation de STLport.

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

Notez que la référence au référentiel git dans le lien de la réponse de Stjepan Rajko n’existe plus. Des sources alternatives sont disponibles sur anddev et, via git, à l'adresse git: // stlport .git.sourceforge.net / gitroot / stlport / stlport. J'ai trouvé ce dernier à discussion plus longue sur l'utilisation de stlport et de boost sous Android.

Depuis que j'ai répondu à cette question pour la première fois, anddev STLPort est compatible avec ma bibliothèque qui appelle également boost, y compris la problématique shared_ptr. Pour plus de détails sur ma solution, voir cette question .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top