ゲームを Android に移植しようとしていますが、保存/読み込み動作にブーストを使用しています。保存コードが呼び出されると、アプリがクラッシュするようになりました。次のサンプル コードのように、text_oarchives を作成しようとすると、クラッシュが発生します。
void OHRMapArchiver::saveMap()
{
// copy some boost-incompatible data structures into ivar vectors
mapInstance->preSave();
CCLog("preSave");
std::ofstream outStream(MAP_SAVE_FILE);
CCLog("creating archive");
boost::archive::text_oarchive outputArchive(outStream);
CCLog("Outputting archive");
outputArchive << mapInstance;
// destroy all that stuff copied during pre-save
mapInstance->tileLoader.erase(mapInstance->tileLoader.begin(), mapInstance->tileLoader.end());
}
なぜこれが当てはまらないのかについて、いくつかのアドバイスを使用できると確信しています。デバイスでデバッグできることをあきらめましたが、特定のエラーが発生しました
boost::archive::text_oarchive outputArchive(outStream);
「0xdead (code=1)、スレッド 1969 (Thread-112) で致命的なシグナル 11 (SIGSEGV)」と呼ばれます。segfault ですが、私の知る限り、ostream のラッパーを作成しているだけなのですが、その理由は想像できません。
その他の役立つ手がかり... うーん、serialize( Archive &ar, int version ) を実装するオブジェクトを作成できることはわかっていますが、オブジェクトがそれを正常に呼び出したかどうかはまだわかりません。リンクの問題の可能性はありますか?
また、アプリに対してファイル アクセス許可が有効になっています。少なくともマニフェストには「uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"」が追加されており、std::ostream.write を使用してクラッシュすることなくファイルを作成および出力できます。また、タイトルが示すように、win32 バージョンは完全に機能し、予期したとおりにデータを出力し、クラッシュすることなく読み込みます。
Jelly Bean を使用するデバイスで、crystaX ndk r7 を使用します。
これが Android でクラッシュする理由について何か考えはありますか?
編集:これに更新します。ブースト愛好家によると、Boost が Android NDK の最新の公式リリースと互換性がないという私の仮定は間違っていました。ユーザー構成ファイルが適切に定義されている場合、boost は最新のものに対して問題なくコンパイルされるはずです。
代わりに、定期的に iostreams が Kit でクラッシュするといううわさを耳にします。