首页 > 解决方案 > 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。

标签: serializationboost

解决方案


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

我现在链接到同一个库,它工作正常。


推荐阅读