В чем разница между gnustl и stlport в разработке android ndk?

Я хочу знать, отличаются ли их производительность/стабильность друг от друга, а их лицензии объясняются короткими. Приветствуется опыт реального мира.

Ответ 1

По состоянию на вчера (NDK r9d) gnustl был еще более полным, например. поддержка <thread> , <future> и некоторых других возможностей С++ 11. Даже они зависят от инструментальной цепочки: вы не можете использовать ARM gcc 4.6 по умолчанию, чтобы включить их.

OTOH, лицензия stlport бесплатна, как и остальная часть AOSP, в то время как исключение связывания GPL v3 для gnustl не так просто понять. См. https://groups.google.com/d/topic/android-ndk/OWl_orR0DRQ для более раннего обсуждения.

Если вы посмотрите заметки о выпуске NDK, вы обнаружите, что с точки зрения фиксированных ошибок эти две реализации STL были более или менее равными.

Я был бы рад видеть тесты производительности, но лично я никогда не сталкивался с ситуацией, когда вариация реализации STL разрешила реальное узкое место.

Ответ 2

GNU STL распространяется под лицензией GPLv3, что неприемлемо для некоторых людей. NDK также предоставляет STLport, и его можно использовать вместо него, но это немного сложнее, поскольку автономная цепочка инструментов не включает его.

По умолчанию цепочка инструментов NDK свяжет ваш С++ shared lib с статической версией GNU STL lib. Однако, если вы используете несколько общих библиотек, неприемлемо ссылаться на статическую версию STL, так как каждая из ваших общих библиотек будет иметь собственную копию STL. Это приведет к нескольким копиям глобальных варов, определенных в STL, и может привести к утечке или повреждению памяти.

ВАЖНО: Использование инструментальной привязки NDK напрямую имеет серьезные ограничения:     Вы не сможете использовать какой-либо С++ STL (STLport или     GNU libstdС++). Также нет исключений и нет RTTI.