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