Android NDK-r5 STLを利用する

AndroidNDK r5では、標準でSTLportをサポートしている。
そこで、普通にstd::stringとか書いてndk-buildって打ったらコンパイル通るのかなと
思っていたらそんなことは無かった。


そこで、android-ndk-r5/docs/CPLUSPLUS_SUPPORT.htmlを読んでみる。


それによると、AndroidプラットフォームではNDKに最小構成のC++ランタイムライブラリと、
それに対応するヘッダを提供しているらしい。
また、その中では例外やRTTIもサポートしている。


しかし、この最小構成ではC++コンパイルは行えるのだが
STLを利用することは出来ない。
そのため、『STLportを利用する』という宣言を行う必要がある。


記述としては、「Android.mk」を置いているjniフォルダと同じ場所に「Application.mk」という
ファイルを作成して、以下の記述を追加するだけで良い。

APP_STL := stlport_static

APP_STLに指定できるパラメータは以下の通り。

system              -> デフォルトの最小構成なC++ランタイムライブラリを利用します。
stlport_static      -> static libraryとしてSTLportを利用します。
stlport_shared      -> 共有ライブラリとしてSTLportを利用します。


基本的にはstlport_staticを指定すればよいと思います。
取り合えず私はそれなので、stlport_sharedは使いません。 なので翻訳書きません!
また、これを利用するにあたって重要な警告がありますのでついでに。

警告 : 重要な警告

現在、我々のSTLPORT実装例では、例外とRTTIをサポートしていません。
 -fexceptions もしくは -frttiは、全てのモジュールで利用しないでください。

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.

ちなみに、この-fexceptionsと-frttiは例外処理とRTTIサポートを
有効にするためのパラメータ。


ともあれ、これを指定してビルドを開始することで
#include などの指定が正常に動くことと思われます。