2013-03-20 99 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

相關問題