STLのポートは、バージョンr5以降のAndroidNDKで正式に利用可能です。静的ライブラリまたは共有ライブラリとして使用できます。次の実装は、NDKで事前に構築されたものを利用できます。
- STLport、v5.2.0に基づく:
- static
stlport_static
:プロジェクトにダイナミックライブラリが1つしかない場合に使用します。
- ダイナミック
stlport_shared
:プロジェクトに複数のダイナミックライブラリがある場合に使用します。
- GNU libstdc ++
system
(静的ライブラリ)
ビルド時に推奨される簡単な使用方法は、次のようにApplication.mkでAPP_STLを定義することです。
APP_STL := stlport_static
また、再構築する場合(これは必須ではありません)、Application.mkでSTLPORT_FORCE_REBUILDを定義します。
STLPORT_FORCE_REBUILD := true
STLportのユニットテストフレームワークも利用できます。
STLportの現在の制限:
- C++例外はサポートされていません
- RTTIはサポートされていません
wchar_t
およびロケールのサポートにおける「考えられるバグ」
さまざまなリンク:
ドキュメントは、次の場所にあるNDKパッケージで入手できます(さらにある場合があります)。
- docsCPLUSPLUS-SUPPORT.html
- sources / cxx-stl / stlport
- sources / cxx-stl / gnu-libstdc ++
ここからNDK+ドキュメントをダウンロードします; ここにバグをファイルする
以下は、docs / CPLUSPLUS-SUPPORT.htmlからの抜粋です(NDK docs、r5から)
III。C ++標準ライブラリ実装の選択:
デフォルトでは、最小限のC ++ランタイムシステムライブラリ(/system/lib/libstdc++.so)のヘッダーとライブラリが、C++ソースの構築時に使用されます。
ただし、変数APP_STLをApplication.mk内の別の値に設定することで、別の実装を選択できます。次に例を示します。
APP_STL:= stlport_static
このNDKで提供される静的STLport実装を選択します。値APP_STL値は次のとおりです。
システム->デフォルトの最小限のC++ランタイムライブラリを使用します。stlport_static->静的ライブラリとして構築されたSTLportを使用します。stlport_shared->共有ライブラリとして構築されたSTLportを使用します。
警告:重要な警告
AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
MODULES THAT USE IT.
警告:重要な警告の終わり
「stlport_shared」は、C ++ STLを使用する共有ライブラリがプロジェクトに複数ある場合に推奨されます。これは、関数の重複、さらに重要なことに、それぞれのグローバル変数(std :: coutなど)の重複を回避するためです。これにより、驚くべき結果が得られる可能性があります。 。
一方、次の例のように、アプリケーションを起動するときに明示的にロードする必要があります。
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("foo");
System.loadLibrary("bar");
}
「libfoo.so」と「libbar.so」の両方が「libstlport_shared.so」に依存している場合。
「libstlport_shared.so」の場合、共有ライブラリの名前は、システムレベルのlibstlport.so(ABIで安定しておらず、NDKで生成されたマシンコードからは使用できない)を含む特定のAndroidシステムイメージとの名前の競合を避けるために注意してください。 。
プロジェクトに共有ライブラリが1つしかない場合は、「stlport_static」をお勧めします。実際に必要なSTL関数と変数のみがマシンコードにリンクされ、コードサイズが小さくなり、動的なstlport_sharedをロードする必要はありません。起動。
IV。STLport固有の問題:
このNDKは、STLport用にビルド済みの静的ライブラリと共有ライブラリを提供しますが、ビルドする前に、環境またはApplication.mkで次のように定義することで、ソースから強制的に再ビルドできます。
STLPORT_FORCE_REBUILD := true
STLportは、BSDスタイルのオープンソースライセンスの下でライセンスされています。ライブラリの詳細については、sources / cxx-stl / stlport/READMEを参照してください。
V.将来の計画:
- STLportをC++例外およびRTTIと互換性を持たせる
- GNUlibstdc++の完全サポート
- uSTLサポート?