升级与二进制档案armv7的Boost序列化兼容性到arm64
Upgrade Compatibility of Boost Serialization with binary archives armv7 to arm64
我所在的公司发布了iOS和Android版本,现在苹果要求我们更新所有应用以运行在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
有没有办法可以升级,和保留用户保存的数据?
如果你需要保留用户的数据,你将不得不逆向工程你的方式走出地狱。你可以通过将旧数据发送到服务器进行转换来作弊。
对于便携式存档,您可以尝试OES portable Archive实现。
它被认为是标准二进制文件的临时替代品,旨在实现真正的可移植性。当然,结果将不是二进制兼容旧格式,所以它只是一个解决方案向前。
相关文章:
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- C++boost序列化多态性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用 Boost 序列化mersenne_twister_engine?
- boost::序列化中的派生类偏移量计算.有效吗?
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 序列化模式类似于boost::序列化
- 序列化和反序列化boost共享指针
- 使用 Boost::Serialization 序列化具有 std::mt19937_64 成员的类
- boost::container::vector 无法用谷物序列化?
- 使用 Boost 对具有 const 成员的类进行序列化
- 使用 boost::序列化代码将 *this 传递给模板函数会产生错误
- C++ 从 Boost object_pool构造的指针的 Boost 二进制序列化
- 如何使用谷物序列化 boost::p tr_vector
- 如何用谷物序列化 boost::uuid
- 派生类行程的序列化Boost断言
- 如何使用Boost序列化来序列化Boost scoped_array
- 如何序列化 <boost::shared_ptr<void *>> 类型的列表变量
- 我如何重载序列化boost函数,使其一个用于文件存储,另一个用于tcp消息