使用 Boost::序列化时内存访问冲突



我正在尝试使用 Boost 的序列化库进行序列化,但它们总是失败并出现相同的无用运行时错误。例如,假设我有一个简单的结构:

struct test {
    unsigned int value;
    template<class Archive>
    void serialize(Archive & ar, unsigned int const version)
    {
        ar & BOOST_SERIALIZATION_NVP(value);
    }
};

这编译得很好。然后,我正在执行将test类型的对象保存到存档并再次加载回来的往返行程。

BOOST_AUTO_TEST_CASE(test_serialization)
{
    test a{42};
    stringstream ss;
    text_oarchive oa(ss);
    oa << BOOST_SERIALIZATION_NVP(a);
}
// ... lots of other tests that pass fine

这也编译得很好。但是,我在运行套件时收到以下错误。

Entering test case "test_serialization"
unknown location(0): fatal error in "test_serialization": memory access violation at address: 0x00000038: no mapping at fault address
Test is aborted

除涉及序列化的测试外,所有其他测试都按预期运行。

什么可能导致问题?


我的设置:

Ubuntu 14.04
boost 1.57 / boost 1.58
clang 3.4 / gcc 4.8.2

-lboost_serialization -lboost_unit_test_framework一起建造 .

由于我有多个 boost 安装,因此包含的 boost 标头来自版本 1.57/1.58,而libboost_serialization.so库来自 1.54 版本。

我用-L/actual/latest/boost/lib/path -lboost_serialization -lboost_unit_test_framework重新编译,它奏效了。

最新更新