我想知道它们的性能/稳定性是否彼此不同,以及它们的许可证是否简要说明。欢迎现实世界的经验。
2 回答
截至昨天(NDK r9d),gnustl 仍然更全面,例如对<thread>、<future> 和其他一些C++11 特性的支持。甚至这些都依赖于工具链:您不能使用默认的 ARM gcc 4.6 来启用它们。
OTOH,stlport 许可证是严肃的,就像 AOSP 的其余部分一样,而 gnustl 的 GPL v3 链接例外则不容易理解。有关一些较早的讨论,请参阅https://groups.google.com/d/topic/android-ndk/OWl_orR0DRQ。
如果您查看 NDK 发行说明,您会发现就修复的错误而言,这两个 STL 实现或多或少是相当的。
我很高兴看到性能基准,但就我个人而言,我从未遇到过 STL 实现变化解决了真正的瓶颈的情况。
GNU STL在 GPLv3 许可下分发,这对某些人来说是不可接受的。NDK 也提供了 STLport 并且可以使用它,但是它有点复杂,因为独立的工具链不包含它。
默认情况下,NDK 工具链会将您的 C++ 共享库链接到 GNU STL 库的静态版本。但是,如果您正在使用多个共享库,那么链接到静态版本的 STL 是不可接受的,因为您的每个共享库都有自己的 STL 副本。这将导致 STL 中定义的全局变量的多个副本,并可能导致内存泄漏或损坏
重要提示:直接使用 NDK 工具链有一个严重的限制:您将无法使用任何 C++ STL(STLport 或 GNU libstdc++)。也没有例外,也没有 RTTI。