【问题标题】:Upgrade Compatibility of Boost Serialization with binary archives armv7 to arm64将 Boost 序列化与二进制存档 armv7 升级到 arm64 的兼容性
【发布时间】:2015-08-16 23:28:32
【问题描述】:

我工作的公司在 iOS 和 Android 上发布,现在 Apple 要求我们更新所有应用程序以在 arm64 架构上运行(以前我们只为 armv7 发布)。不幸的是,我们一直在使用boost::archive::binary_iarchive(和binary_oarchive)来存储大量用户数据(保存的游戏、偏好等)。

在测试时,加载这些由 armv7 二进制文件保存的档案现在在运行我们游戏的“通用二进制”版本的 arm64 设备上严重失败。

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

我们有什么方法可以升级、保留用户保存的数据?

【问题讨论】:

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


    【解决方案1】:

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

    对于可移植存档,您可以尝试OES Portable Archive 实现。

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

    【讨论】:

    • 谢谢。我非常害怕这一点。我认为我们实际上可能会为我们的某些数据类型采取逆向工程路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2021-08-20
    相关资源
    最近更新 更多