【问题标题】:Boost text_oarchive constructor crashes on Android, not windowsBoost text_oarchive 构造函数在 Android 上崩溃,而不是 Windows
【发布时间】:2013-02-17 19:27:32
【问题描述】:

我正在尝试将游戏移植到 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) at 0xdead (code=1), thread 1969 (Thread-112)”。所以段错误,但我无法想象为什么,据我所知,它只是在 ostream 周围创建一个包装器。

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

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

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

有什么想法为什么会在 Android 上崩溃?

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

相反,我听到提升 iostreams 的传言经常与 Kit 崩溃。

【问题讨论】:

    标签: android boost file-io storage


    【解决方案1】:

    这真的不是答案;我没有找到/找不到其中之一。我只能建议您不要尝试做我正在做的事情。至少,不是 android NDK r8d。

    在研究了正确配置 Boost 以在不支持 wchar 的情况下构建的方法之后,NDK 有点半途而废,在 windows 上运行的代码在 boost 中的序列化/存档库中的某处崩溃。我不知道在哪里。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多