グレインの備忘録

プログラミング関係とかをつらつらと。

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は闇が深い…