![](/img/trans.png)
[英]CRASH: Segmentation fault: Boost serialization loading - calling constructor with null
[英]boost::serialization segmentation fault
尝试使用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
Boost 1.59安装在Ubuntu Trusty上
./bootstrap.sh -prefix=/usr
sudo ./b2 install
为什么会这样呢?
在ubuntu上手动安装Boost之后,程序与错误的库链接。 在/ usr / lib / x86_64-linux-gnu目录中安装了boost的另一个副本,该副本的链接程序优先级更高。 在Ubuntu上,来自存储库的默认Boost安装是多体系的,用于Intel处理器的64位版本安装在/ usr / lib / x86_64-linux-gnu中,并且可能是同一台计算机上几种体系结构的多个版本。
作为简单的手动增强安装的变体(实际适用于1.59):
./bootstrap.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo ./b2 install
来自boost解压缩源目录的bash shell命令。
这会将boost安装在标准目录中,并由存储库中的标准boost软件包使用和安装。 (并且可能潜在地导致与标准软件包的某些冲突)
或在某些目录中安装boost,并以某种标准方式使其对链接器可见。 或直接链接到已安装的库,例如,使用/usr/lib/libboost_serialization.so或/usr/lib/libboost_serialization.a,而不使用-lboost_serialization链接器选项。
感谢大家的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.