serialization - boost 1.41 序列化不支持版本
问题描述
我正在使用 Boost 1.41 从内存中读取序列化类,并且得到一个“不支持的版本”异常,即使生成序列化类的程序也使用了 Boost 1.41。
我正在使用以下方法读取数据:
void ConvertMessage (const unsigned char *msgAddress)
{
MessageData messageData;
int msgSize = msgSystem.getDataSize (message); // external system returns message size
char *msgData = new char[msgSize];
memcpy (msgData, msgAddress, msgSize);
try
{
typedef boost::iostreams::basic_array_source<char> Device;
boost::iostreams::stream_buffer<Device> msgStream (msgData, msgSize);
boost::archive::binary_iarchive msg (msgStream); // exception thrown here
msg >> messageData;
}
catch (boost::archive::archive_exception const &e)
{
cout << e.what() << endl;
}
// Code to convert messageData to an internal class.
}
我读过使用 Boost 1.44 从 Boost 1.44 之前的档案读取档案存在问题,但我发现双方都使用 Boost 1.41 存在问题。
当两个程序使用与我们在同一台计算机上相同的库但现在我们在不同的计算机上时,我能够毫无问题地运行它。
有什么方法可以验证我们实际上使用的是完全相同的版本吗?
我假设如果序列化的生产者使用 Boost 1.41 并且我使用 Boost 1.41 反序列化数据应该没有问题,但是当我尝试创建时看到“不支持的版本”异常boost::archive::binary_iarchive。
解决方案
事实证明,在内存中构建流的程序使用的是 Boost 1.54,因此可以解释“不支持的版本”异常的原因。
我现在链接到同一个库,它工作正常。
推荐阅读
- mysql - MySQL - 运行 INSERT INTO 查询的问题
- flutter - 如何在堆栈中将文本放置在图像上?
- lua - 尝试使用 Discordia 和 Lua hasRole() 构建 Discord 机器人会使其崩溃
- javascript - setCollideWorldBounds(true) 不是函数,使用 Phaser 3
- python - 为什么在 nn.Module 中返回 self.head(x.view(x.size(0), -1)) 用于 pyTorch 强化学习示例
- python - 如何显示不同节点之间的关系
- c++ - C++ - 如何调整此代码片段以使用 unicode?
- visual-studio-code - 如何在变量窗口中设置列标签?
- entity-framework-core - 有条件地使用 Entity Framework Core 创建数据库表
- javascript - 如何使用 jQuery 引用复杂的 html 选择器?