2013-03-20 8 views

risposta

2

A partire da ieri (NDK r9d), gnustl era ancora più completo, ad es. supporto per il thread <>, < futuro> e alcune altre funzionalità di C++ 11. Anche questi dipendono dalla toolchain: non è possibile utilizzare l'ARM gcc 4.6 predefinito per averli abilitati.

OTOH, la licenza di stlport è priva di esitazioni, come il resto di AOSP, mentre l'eccezione di collegamento a GPL v3 per gnustl non è facile da comprendere. Vedi https://groups.google.com/d/topic/android-ndk/OWl_orR0DRQ per alcune discussioni precedenti.

Se si osservano le note di rilascio di NDK, si scoprirà che in termini di bug corretti queste due implementazioni STL erano più o meno alla pari.

Sarei lieto di vedere i benchmark delle prestazioni, ma personalmente non ho mai riscontrato una situazione in cui la variazione di implementazione STL ha risolto un vero e proprio collo di bottiglia.

0

GNU STL è distribuito con licenza GPLv3 che non è accettabile per alcune persone. NDK fornisce anche STLport ed è possibile utilizzarlo, ma è un po 'più complicato in quanto la catena di strumenti autonoma non lo include.

Per impostazione predefinita, la catena di strumenti NDK collega le librerie condivise di C++ a una versione statica di GNU STL lib. Tuttavia, se si utilizzano diverse librerie condivise, non è accettabile il collegamento con la versione statica di STL poiché ciascuna delle librerie condivise avrà una propria copia di STL. Questo si tradurrà in più copie di Vars globali definiti in STL e può portare a perdita di memoria o di corruzione

IMPORTANT: Utilizzando la toolchain NDK ha direttamente una seria limitazione: Non sarà in grado di utilizzare qualsiasi STL C++ (sia STLport o GNU libstdC++) con esso. Inoltre senza eccezioni e senza RTTI.

+0

NDK r9d, docs/STANDALONE_TOOLCHAIN.html: è possibile specificare --stl = stlport per copiare libstlport anziché libgnustl. Si noti che per il collegamento alla libreria condivisa, in questo caso è necessario utilizzare in modo esplicito -lstlport_shared , proprio come è necessario utilizzare -lgnustl_shared per il caso GNU libstdC++. –

+1

Inoltre, gnu-stl specifica un'espansione su GPL v3, che consente in pratica all'app di codice chiuso di utilizzarla come collegamento condiviso o addirittura statico, purché il codice della libreria non venga modificato. –

Problemi correlati