将Boost序列化的兼容性与二进制存档armv7升级到arm64

时间:2015-06-02 23:51:58

标签: c++ serialization boost boost-serialization arm64

我在iOS和Android上发布的公司,现在Apple要求我们更新所有应用程序以在arm64架构上运行(之前我们只发布了armv7)。很遗憾,我们一直在使用boost::archive::binary_iarchive(和binary_oarchive&s;)来存储大量用户数据(已保存的游戏,偏好等)。

在测试时,armv7二进制文件保存的这些档案的加载现在在运行" Universal Binary"我们的游戏版本。

template<typename T>
static T Deserialize(std::vector<char> buffer) {
    boost::iostreams::basic_array_source<char> source(&buffer[0], buffer.size());
    boost::iostreams::stream<boost::iostreams::basic_array_source<char>> input_stream(source);
    boost::archive::binary_iarchive ia(input_stream); // crashes here
    T value;
    ia >> BOOST_SERIALIZATION_NVP(value);
    return value;
}

我们传入的缓冲区大小合理。基于它在boost::archive::binary_iarchive的构造函数期间崩溃的事实,我猜它无法正确读取头文件。

这是记录的错误:

(2005,0x19a1c0310) malloc: *** mach_vm_map(size=7598247065923108864) failed (error code=3)
*** error: can't allocate region

我们有什么方法可以升级,让用户&#39;保存数据?

1 个答案:

答案 0 :(得分:1)

如果你需要保留用户的数据,那么你将不得不逆向工程。您可以通过将旧数据发送到服务器进行转换来作弊。

对于便携式存档,您可以尝试OES Portable Archive实施。

它应该是标准二进制存档的直接替代品,旨在真正实现可移植性。当然,结果不会与旧格式二进制兼容,因此它只是一个解决方案。