为什么我不能编译Boost.Serialization演示?

时间:2018-06-25 01:17:00

标签: c++ serialization boost g++

我正在运行Ubuntu 16.04。我正在尝试设置Boost.Serialization,并且在编译tutorial的第一个演示时遇到了麻烦(标题为“非常简单的情况”)。我已经按照Boost Getting Started页面的说明安装了Boost和构建序列化,并执行以下操作:

  • SourceForge下载代码(我尝试过包括1.67.0和1.55.0在内的不同版本)
  • cd boost_1_55_0
  • ./bootstrap.sh --prefix=/usr/local --with-libraries=serialization
  • sudo ./b2 install
  • 检查/usr/local/include/usr/local/lib是否包含相关的Boost文件

然后我使用{p>

demo.cpp

并出现以下错误:

  

/tmp/cc9a7HRg.o:在函数g++ -o demo demo.cpp -I /usr/local/include/boost -l boost_serialization中的boost :: archive :: detail :: shared_ptr_helper :: shared_ptr_helper()'   /tmp/cc9a7HRg.o:在函数boost::archive::text_iarchive::text_iarchive(std::istream&, unsigned int)': demo.cpp:(.text._ZN5boost7archive13text_iarchiveC2ERSij[_ZN5boost7archive13text_iarchiveC5ERSij]+0x36): undefined reference to中,boost :: archive :: detail :: shared_ptr_helper ::〜shared_ptr_helper()'   collect2:错误:ld返回1退出状态

导致错误的行是

boost::archive::text_iarchive::~text_iarchive()':
  demo.cpp:(.text._ZN5boost7archive13text_iarchiveD2Ev[_ZN5boost7archive13text_iarchiveD5Ev]+0x24): undefined reference to

值得一提的是输出线

boost::archive::text_iarchive ia(ifs);

在最近的重新安装之前引起了类似的错误。另外,如果我注释掉所有输入(包括导致错误的行),则程序可以正常编译,但在运行时会导致分段错误。我已经在boost::archive::text_oarchive oa(ofs); 的末尾加入了cout << "done" << endl;,但是没有达到。

有人知道什么可能导致此错误吗?抱歉,这似乎是一个愚蠢的问题。我对C ++开发非常陌生。预先谢谢你!

2 个答案:

答案 0 :(得分:1)

sudo apt-get install libboost-all-dev

为我工作。

此命令与lboyd的解决方案来自同一来源: https://www.technical-recipes.com/2012/getting-started-with-the-boost-libraries-in-ubuntu-linux/

然后我用

进行编译
g++ serialization.cpp -lboost_serialization -lboost_system

答案 1 :(得分:0)

对于遇到此问题的其他任何人,我设法通过手动卸载从源安装的所有内容(从/usr/locale/include//usr/local/lib/以及根Boost目录中删除了相关的Boost文件来修复此问题) ),并按照here所述使用apt-get安装。