在Android NDK开发中,gnustl和stlport有什么区别?

13

我想知道它们之间的性能/稳定性是否有差异,以及简要说明它们的许可证。欢迎分享真实世界的经验。


请您详细描述一下它们的区别。 - CoDe
2个回答

4
截至昨天(NDK r9d),gnustl仍然更全面,例如支持<thread>,<future>和其他一些C++11功能。即使这些也取决于工具链:您不能使用默认的ARM gcc 4.6启用它们。
另一方面,stlport许可证是无疑义的免费的,就像AOSP的其余部分一样,而gnustl的GPL v3链接例外并不容易理解。请参见https://groups.google.com/d/topic/android-ndk/OWl_orR0DRQ 获取一些旧的讨论。
如果您查看NDK发行说明,您会发现在修复错误方面,这两个STL实现基本上是同等水平的。
我很乐意看到性能基准测试,但个人从未遇到过STL实现变化解决实际瓶颈的情况。

1

GNU STL使用GPLv3许可证发布,这对某些人来说不可接受。 NDK还提供了STLport,可以使用它代替,但作为独立的工具链使用它会更加复杂,因为它并未包含在内。

默认情况下,NDK工具链将链接您的C ++共享库到GNU STL库的静态版本。但是,如果您正在使用多个共享库,则不能链接到静态版本的STL,因为每个共享库都将有其自己的STL副本。这将导致STL中定义的全局变量的多个副本,并可能导致内存泄漏或损坏。

重要:直接使用NDK工具链存在一个严重的限制: 您将无法使用任何C ++ STL(无论是STLport还是 GNU libstdc++)。还没有异常和RTTI。


NDK r9d,docs/STANDALONE_TOOLCHAIN.html:您可以指定--stl=stlport来复制libstlport而不是libgnustl。请注意,在链接共享库时,您将不得不显式使用<code>-lstlport_shared</code>,就像您需要在GNU libstdc++情况下使用<code>-lgnustl_shared</code>一样。 - Alex Cohn
1
此外,gnu-stl规定了GPL v3的例外情况,实际上允许封闭代码应用程序将其用作共享或静态链接,只要库代码没有更改。 - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接