boost 1.41序列化不受支持的版本

时间:2018-11-13 16:38:12

标签: serialization boost

我正在使用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。

1 个答案:

答案 0 :(得分:0)

事实证明,正在内存中构建流的程序正在使用Boost 1.54,因此可以解释“不受支持的版本”异常的原因。

我现在链接到相同的库,并且运行正常。