2013-03-20 101 views

回答

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实现差异解决了真正瓶颈的情况。

0

GNU STL按照GPLv3许可证分发,这是许多人不能接受的。 NDK还提供了STLport,并且可以使用它,但是它更复杂一些,因为独立的工具链不包含它。

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

IMPORTANT:使用NDK工具链直接有严重的局限性: 您将无法使用任何C++ STL(无论是STLport或 GNU libstdC++)。也没有例外,也没有RTTI。

+0

NDK r9d,docs/STANDALONE_TOOLCHAIN.html:您可以指定--stl = stlport来复制libstlport而不是libgnustl。请注意, 要与共享库链接,在这种情况下,您必须明确使用-lstlport_shared ,就像您需要使用-lgnustl_shared来处理GNU libstdC++的情况一样。 – 2014-07-18 17:56:02

+1

另外,gnu-stl指定了一个GPL v3的扩展,只要库代码没有改变,它允许实践中的闭代码应用程序将其用作共享甚至静态链接。 – 2014-07-18 18:02:26

相关问题