ARM上でBoost::shared_ptrがリンクエラー
armでlibgnustl_shared.soをSTLとしてリンクし、boost_1_55_0でshared_ptrを使うと、undefined referenceのエラーが出る。Android用GNU STLはAndroid NDK標準のSTLと違って基本的にほぼx86用同等だと思っていたけど…と思っていたら以下に解決策があった。
https://legacy.madewithmarmalade.com/jp/node/52963
コンパイルするコードのどこかに、
namespace boost { void throw_exception( std::exception const & e ) { } }
と書けばOK。自分のAndroid環境では上記URLに書いてあるBOOST_NO_EXCEPTIONSをdefineしなくてもOKだった。これでshared_ptrが使える。もちろん他のboostの便利機能splitとかlexical_castとかtrimとかも。
そもそもC++11でビルドすればstd::shared_ptrが使えるはずなんだけど、-std=c++0x 付けると::uint64_tがundefinedだのなんだのたくさんエラーが出てきた。g++ 4.6ではC++11の機能が全部カバーされてるわけではないようなので(下記URL)、とりあえず当面はC++11はDisableにしておく。