Frage

Ich arbeite mit dem Android NDK, und da es zur Zeit nicht die STL unterstützen, ich frage mich, ob da draußen irgendwelche brillanten Menschen gibt, den Erfolg mit diesem gehabt hat, oder wissen, welche für die Android-Plattform besser geeignet ist :. USTL oder STLPort

EDIT: Sieht aus wie eine andere Option CrystaX .NET können.

Von ihrer Website:

  

... kundenspezifische Verteilung von Android   NDK r3, die ich wieder aufgebaut aus   offizielle Quellen. Unterstützung von C ++   Ausnahmen, RTTI und Standard C ++   Bibliothek hinzugefügt.

War es hilfreich?

Lösung

STLport nun seit Android2.3 unterstützt !!!

Andere Tipps

Ports von STL ist offiziell verfügbar im Android NDK ab Version r5 auf. Es kann entweder als statische oder gemeinsam genutzte Bibliothek verwendet werden. Die folgenden Ausführungen sind verfügbar prebuilt mit dem NDK:

  • STLport , basierend auf V5.2.0:
    • statischer stlport_static. Verwenden, wenn Sie nur eine dynamische Bibliothek in Ihrem Projekt
    • dynamischer stlport_shared. Verwenden, wenn Sie mehr als eine dynamische Bibliothek in Ihrem Projekt
  • GNU libstdc ++ system (statische Bibliothek)

Die empfohlene, einfach so, wie es bei der Erstellung ist die Verwendung durch die Definition APP_STL im Application.mk, wie folgt aus:

APP_STL := stlport_static

Und wenn Sie wollen, es wieder aufzubauen (dies ist nicht notwendig), definiert STLPORT_FORCE_REBUILD in Ihrem Application.mk:

STLPORT_FORCE_REBUILD := true

Die Einheit Test-Framework für STLport ist ebenfalls verfügbar.

Aktuelle Einschränkungen für STLport :

  • C ++ Ausnahmen nicht unterstützt
  • RTTI nicht unterstützt
  • "Möglicher Fehler" in Unterstützung für wchar_t und locales

Verschiedene Links:

Die Dokumentation ist in den NDK-Paketen an den folgenden Stellen zur Verfügung (es kann mehr sein):

  • docsCPLUSPLUS-support.html
  • Quellen / cxx-stl / STLport
  • Quellen / cxx-stl / Gnu-libstdc ++

Herunterladen NDK + docs hier ; Datei Fehler hier


Es folgt ein Auszug aus docs / Cplusplus-support.html (von NDK docs, r5)

III. Die Auswahl der C ++ Standard Library Implementierung:

Standardmäßig werden die Header und Bibliotheken für die minimal C ++ Runtime-System Bibliothek (/system/lib/libstdc++.so) verwendet werden, wenn C ++ Quellen zu bauen.

Sie können jedoch eine andere Implementierung auswählen, indem Sie die Variable Einstellung APP_STL auf etwas anderes in Ihrem Application.mk, zum Beispiel:

APP_STL: = stlport_static

die statische STLport Implementierung mit diesem NDK bereitgestellt auszuwählen. Wert APP_STL Werte sind die folgenden:

System -> Verwenden Sie den Standard minimal C ++ Laufzeitbibliothek.    stlport_static -> Verwenden STLport gebaut als eine statische Bibliothek.    stlport_shared -.> Nutzung STLport als gemeinsam genutzte Bibliothek gebaut

ACHTUNG: WICHTIGE 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.

ACHTUNG: ENDE wichtige Einschränkung

„stlport_shared“ bevorzugt, wenn Sie mehrere gemeinsam genutzte Bibliotheken haben in Ihrem   Projekt, das die C ++ STL verwenden, da es doppelte Funktionen vermeidet   und was noch wichtiger globaler Variablen (z std :: cout) in jedem von   sie, die überraschenden Ergebnisse hat.

Auf der anderen Seite, werden Sie es explizit laden müssen beim Start Ihres   Anwendung, wie im folgenden Beispiel:

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

Wenn sowohl "libfoo.so" und "libbar.so" hängen von "libstlport_shared.so".

Beachten Sie, dass der Name der gemeinsam genutzten Bibliothek, wenn „libstlport_shared.so“ zu vermeiden   Konflikte mit bestimmten Android-System Bildern zu benennen, die eine umfassen   Systemebene libstlport.so (was sein ABI stabil nicht geschieht und   kann nicht von NDK-generierte Maschinencode verwendet werden).

„stlport_static“ bevorzugt, wenn Sie nur eine gemeinsam genutzte Bibliothek in Ihrem   Projekt: Nur die STL-Funktionen und Variablen, die Sie tatsächlich werden müssen   zu Ihrem Maschinencode verknüpfen, deren Codegröße zu reduzieren, und Sie werden nicht brauchen   die dynamische stlport_shared beim Start geladen werden.

IV. STLport spezifische Themen:

Das NDK vorkompilierte statische und gemeinsam genutzte Bibliotheken für STLport bietet, aber man kann es erzwingen, indem Sie definieren die folgenden von Quellen neu aufgebaut werden in Ihrer Umgebung oder Ihren Application.mk vor Gebäude:

STLPORT_FORCE_REBUILD := true

STLport wird unter einer BSD-Open-sou lizenziertrce Lizenz. Sehen Quellen / cxx-stl / STLport / README, um weitere Informationen über die Bibliothek.

V. Pläne für die Zukunft:

  • Erstellen STLport kompatibel mit C ++ Ausnahmen und RTTI
  • Voll GNU libstdc ++ Unterstützung
  • USTL Unterstützung?

beachten Sie nur, dass USTL von dem Standard ziemlich viel abweicht. Zum Beispiel nimmt sie UTF-8-Kodierung für std :: string. Noch sieht interessant aus, aber ...

Ich kam vor kurzem in einigen Helfer-Skripte und einen Port von STLport für Android , von John Ripley.

Es gibt auch eine ähnliche Blog-Post mit Anweisungen, wie man es einrichten .

Ich nehme an, dass könnte es einfacher machen mit STLport zu gehen.

Dies ist, wie ich konfiguriert STLPort mit Android Froyo zu arbeiten.

// 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

Hinweis

, dass das Git Repository Erwähnung in der Verbindung von Stjepan Rajkos Antwort nicht mehr existiert. Alternative Quellen sind auf anddev und über git, bei git: // STLport .git.sourceforge.net / gitroot / STLport / STLport. Ich fand das letzteres in einem mehr Diskussion von sowohl STLport und Schub unter Android verwendet wird.

Da zunächst diese Frage zu beantworten, ich habe die anddev STLPort bekommen mit meiner Bibliothek zu arbeiten, die auch boost nennt, einschließlich der problematischen shared_ptr. Einzelheiten dazu finden Sie meine Lösung diese Frage .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top