USTL nebo STLPort pro Android?

hlasů
31

Pracuji s Android NDK, a vzhledem k tomu, že v současné době nepodporuje STK, byl jsem přemýšlel, jestli existují nějaké brilantní lidé, kteří tam měli úspěch s tím, nebo vědět, který je vhodnější pro platformu Android: USTL nebo STLPort.

EDIT: Vypadá to, že další možnost může být CrystaX .NET .

Z jejich webových stránek:

... přizpůsobené rozložení Android NDK R3, kterou jsem přestavěl z oficiálních zdrojů. Podpora C ++ výjimek, RTTI a Standard C ++ Library přidán.

Položena 30/10/2009 v 17:41
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
33

Porty STL jsou oficiálně k dispozici v Android NDK z verze R5 dále. Může být použit buď jako statické nebo sdílené knihovny. Následující implementace jsou k dispozici montované s NDK:

  • STLport na základě v5.2.0:
    • static stlport_static: použít, pokud máte pouze jeden dynamický knihovny v projektu.
    • Dynamická stlport_shared: používat, pokud máte více než jeden dynamický knihovny v projektu.
  • GNU libstdc ++ system(statické knihovny)

Doporučená, snadný způsob, jak ji používat při jeho sestavování je definováním APP_STL v Application.mk, například takto:

APP_STL := stlport_static

A pokud chcete přestavět to (to je to nutné), definovat STLPORT_FORCE_REBUILD v Application.mk:

STLPORT_FORCE_REBUILD := true

Testovací rámec jednotka STLport je také k dispozici.

Současné omezení pro STLport :

  • C ++ výjimky nejsou podporovány
  • RTTI není podporován
  • „Pravděpodobné chyby“ na podporu pro wchar_ta locales

Různé odkazy:

Dokumentace je k dispozici v balíčcích v těchto místech NDK (tam může být více):

  • docsCPLUSPLUS-support.html
  • Zdroje / cxx-STL / stlport
  • Zdroje / cxx-STL / gnu-libstdc ++

Stáhnout NDK + dokumenty zde ; souborové chyby zde


Níže je výňatek z dokumentů / CPLUSPLUS-support.html (od NDK dokumentů, R 5)

III. Volba Realizace na standardní knihovny C ++:

Ve výchozím nastavení záhlaví a knihovny pro minimální C ++ runtime systém knihovny (/system/lib/libstdc++.so) se používají při vytváření C ++ zdrojů.

Můžete však zvolit jinou implementaci nastavením proměnné APP_STL k něčemu jinému ve vaší Application.mk, například:

APP_STL: = stlport_static

Chcete-li vybrat provádění statické STLport dodávaném s tímto NDK. Hodnoty Hodnota APP_STL jsou následující:

Systém -> Použít výchozí minimální C ++ runtime knihovny. stlport_static -> Použít STLport postavena jako statické knihovny. stlport_shared -> Použít STLport postavena jako sdílené knihovny.

POZOR: důležité upozornění

 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.

POZOR: END OF důležité upozornění

„Stlport_shared“ je výhodné, pokud máte několik sdílené knihovny v projektu, které používají C ++ STL, protože se vyhýbá zdvojování funkcí a co je důležitější globálních proměnných (např std :: cout), v každém z nich, což může mít překvapivé výsledky ,

Na druhou stranu, budete muset načíst explicitně při spouštění aplikace, jako v následujícím příkladu:

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

Kde oba „libfoo.so“ a „libbar.so“ záviset na „libstlport_shared.so“.

Všimněte si, že název sdílené knihovny, pokud „libstlport_shared.so“ vyhnout pojmenování konflikty s některými systémem Android obrazů, které obsahují libstlport.so na systémové úrovni (což se stane, že nebude mít ABI stabilní a nemůže být použita z NDK generované strojového kódu) ,

„Stlport_static“ je výhodné, pokud máte pouze jeden sdílené knihovny v projektu: pouze funkce STL a proměnné, které skutečně potřebují bude propojen s vaším strojním kódu, což snižuje jeho velikost kódu, a nebudete muset načíst dynamické stlport_shared na startup.

IV. STLport specifické problémy:

Tato NDK poskytuje přednastavených statické a sdílené knihovny pro STLport, ale můžete vynutit, aby byl přestavěn ze zdrojů definováním následující ve svém prostředí nebo váš Application.mk před zahájením výstavby:

STLPORT_FORCE_REBUILD := true

STLport pod licencí BSD open-source licencí a. Viz zdroje / cxx-STL Stavba / stlport / README pro více informací o knihovně.

V. Plány do budoucna:

  • Udělat STLport kompatibilní s C ++ výjimek a RTTI
  • Full GNU libstdc ++ Podpora
  • Podpora USTL?
Odpovězeno 17/12/2010 v 08:50
zdroj uživatelem

hlasů
9

STLport podporuje od Android2.3 teď !!!

Odpovězeno 13/12/2010 v 15:08
zdroj uživatelem

hlasů
9

Nedávno jsem narazil na některé pomocné skripty a přístavu STLport pro Android , John Ripley.

K dispozici je také příbuzný blog post s instrukcemi, jak jej můžete nastavit .

Domnívám se, že by mohl dělat to jednodušší jít s STLport.

Odpovězeno 30/10/2009 v 21:00
zdroj uživatelem

hlasů
9

Jen vědomí, že USTL odchyluje od standardního docela dost. Například se předpokládá, že kódování UTF-8 pro std :: string. Stále vypadá zajímavě, ale ...

Odpovězeno 30/10/2009 v 18:41
zdroj uživatelem

hlasů
3

To je, jak jsem nakonfigurován STLPort pracovat s 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

Odpovězeno 05/11/2010 v 17:44
zdroj uživatelem

hlasů
0

Všimněte si, že git úložiště zmínka v odkazu z Stjepan Rajko odpověď neexistuje. Alternativní zdroje jsou na anddev a přes git na git: //stlport.git.sourceforge.net/gitroot/stlport/stlport. Zjistil jsem, druhý na delší diskusi o použití obou stlport a zvýšený pod Android.

Vzhledem k tomu, první odpovědi na tuto otázku, jsem se dostal anddev STLPort pracovat s mé knihovny, který rovněž volá podporu, včetně problematického shared_ptr. Pro podrobnosti o mé řešení vidět tuto otázku .

Odpovězeno 02/12/2010 v 23:26
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more