在Android上提升text_oarchive构造函数崩溃,而不是Windows

时间:2013-02-17 19:27:33

标签: android boost file-io storage

我正在尝试将游戏移植到Android,我一直在使用boost来保存/加载行为。当调用保存代码时,应用程序现在崩溃。尝试生成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);

被称为“致命信号11(SIGSEGV)在0xdead(代码= 1),线程1969(线程-112)”。所以段错误,但我无法想象为什么,据我所知,它只是在ostream周围创造一个包装器。

其他有用的线索......嗯,我知道我可以创建实现序列化的对象(Archive&amp; ar,int版本),虽然我不能确定任何对象已成功调用它。可能的联系问题?

此外,还为App启用了文件访问权限。至少,“使用权限android:name =”android.permission.WRITE_EXTERNAL_STORAGE“”已添加到清单中,我可以使用std :: ostream.write制作和输出文件而不会崩溃。此外,正如标题所暗示的那样,win32版本运行良好,按预期输出数据并在不崩溃的情况下重新读回。

在使用Jelly Bean的设备上使用crystaX ndk r7。

有关为什么会在Android上崩溃的任何想法?

编辑:更新到此。根据提升爱好者的说法,我错误地认为Boost与Android NDK的最新正式版本不兼容。如果正确定义了用户配置文件,则boost应该针对最新版本进行编译。

相反,我听到了一些隆隆声,这些声音会让Iostream经常崩溃。

1 个答案:

答案 0 :(得分:0)

这真的不是答案;我还没找到/找不到其中的一个。我所能推荐的只是你根本不试图做我正在做的事情。至少,不是Android NDK r8d。

在研究了如何正确配置Boost以便在没有wchar支持的情况下进行构建(NDK有点一半),在Windows上工作的代码在boost中的序列化/归档库中崩溃了。我不知道在哪里。

所以是的,答案是'放弃,最好是在浪费四个月跟踪解决方案之前'。