USTL oder STLPort für Android?
-
22-07-2019 - |
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.
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
- statischer
- 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
, 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 .