使用 Boost::Serialization 时发生内存访问冲突

Memory access violation when using Boost::Serialization

我正在尝试使用 Boost 的序列化库进行序列化,但它们总是失败并出现同样无用的 运行time 错误。比方说,我有一个简单的结构:

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 headers 来自版本 1.57/1.58,而 libboost_serialization.so 库来自版本 1.54。

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