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