我正在使用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文件存在问题,但是我发现使用Boost 1.41的双方都存在问题。
当两个程序使用与我们在同一台计算机上相同的库时,我能够运行此程序而没有问题。
有什么方法可以验证我们是否确实使用了完全相同的版本?
我假设,如果序列化的生产者使用Boost 1.41,而我使用Boost 1.41对数据进行反序列化,那应该不会有问题,但是当我看到“不受支持的版本”异常时,尝试创建boost :: archive :: binary_iarchive。
答案 0 :(得分:0)
事实证明,正在内存中构建流的程序正在使用Boost 1.54,因此可以解释“不受支持的版本”异常的原因。
我现在链接到相同的库,并且运行正常。