Android NDKでboost::filesystemが使えない
前回(Android NDK r11cでboost 1.61.0をビルド - グレインの備忘録)の続き。
リンクエラーになる
boost::filesystemを使ったアプリをコンパイルするとリンカエラーが出てしまう。
libs/filesystem/src/path.cpp:function (anonymous namespace)::path_locale(): error: undefined reference to 'std::locale::locale(char const*)'
要するにstd::localeのコンストラクタがリンクできていないらしい。
アプリ側で使ってもこんな事にはならないのに一体何故だ・・・
まあ文句を言ってもしょうがないし、とりあえずlocale機能は自分は使っていないと思うので横着して済ませておく。
boostのlibs/filesystem/src/path.cppの908行目あたりの、
# else // Other POSIX // ISO C calls std::locale("") "the locale-specific native environment", and this // locale is the default for many POSIX-based operating systems such as Linux. return std::locale(""); # endif
ってなってるやつを
# else // Other POSIX // ISO C calls std::locale("") "the locale-specific native environment", and this // locale is the default for many POSIX-based operating systems such as Linux. #ifdef ANDROID return std::locale(); #else return std::locale(""); #endif # endif
に変える。
この後boost::filesystemを再ビルドしてもう一回アプリをコンパイルしたらとりあえず通った模様。
NDKでのboostは闇が深い…