我正在尝试使用 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
重新编译,它奏效了。