boost ::序列化分段错误

时间:2015-09-25 07:26:43

标签: c++ boost boost-serialization

尝试使用boost::serialization文本或使用字符串或文件流的二进制存档编译任何程序我有分段错误错误。即使是简单的代码,如:

#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <sstream>

int main()
{
  std::stringstream ss;
  {
    try
    {
      boost::archive::binary_oarchive oa(ss);
    }
    catch(...) {}
  }
}

错误:

received signal SIGSEGV, Segmentation fault.
In ?? () ()
#1  0x00007ffff79ad770 in sputn (__n=8, __s=0x7fffffffd990 "\026", this=<optimized out>) at /usr/include/c++/4.8/streambuf:451
/usr/include/c++/4.8/streambuf:451:15915:beg:0x7ffff79ad770
At /usr/include/c++/4.8/streambuf:451
#1  0x00007ffff79ad770 in sputn (__n=8, __s=0x7fffffffd990 "\026", this=<optimized out>) at /usr/include/c++/4.8/streambuf:451
/usr/include/c++/4.8/streambuf:451:15915:beg:0x7ffff79ad770

在Ubuntu trusty上安装了Boost 1.59

./bootstrap.sh -prefix=/usr
sudo ./b2 install

为什么会这样?

1 个答案:

答案 0 :(得分:1)

在ubuntu上手动加载安装后,程序与错误的库链接。还有另一个boost副本,安装在/ usr / lib / x86_64-linux-gnu目录中,它对链接器具有更高的优先级。在Ubuntu上,来自存储库的默认boost安装是multiarch,英特尔处理器的64位版本安装在/ usr / lib / x86_64-linux-gnu中,并且可能是同一台机器上多个架构的几个版本。

作为简单手动增压安装的变体(实际为1.59):

./bootstrap.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo ./b2 install
来自boost unpacked源目录的

bash shell命令。

这将在标准目录中安装boost,使用和来自存储库的标准boost包。 (并且可能会导致与标准软件包发生冲突)

或者在某个目录中安装boost,并以某种标准方式为链接器显示它。或直接链接到已安装的库,例如使用/usr/lib/libboost_serialization.so或/usr/lib/libboost_serialization.a而不是-lboost_serialization链接器选项。

感谢所有人的帮助。