首页 > 解决方案 > 为什么 boost zlib 压缩器会抛出奇怪的错误

问题描述

我正在尝试使用 boost zlib 压缩器。当我运行以下代码时,即使没有打印“1”,程序也会以 -1 代码退出:

#include <iostream>
#include <vector>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/iostreams/filter/zlib.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <sstream>
#include<zlib.h>

int main() {
    std::cout << "1" << std::endl;
    std::stringstream ss;
    boost::iostreams::filtering_ostreambuf fos;
    fos.push(boost::iostreams::zlib_compressor(boost::iostreams::zlib::best_compression));
    fos.push(ss);
    boost::archive::binary_oarchive archive(fos);
    std::string s = "HELLO!";
    archive << s;
    archive << 58;
    std::cout << ss.str() << std::endl;
    return 0;
}

当我注释掉我构造 zlib_compressor 的行时,程序按预期工作,但没有压缩任何东西。为什么这段代码不起作用?

标签: c++boostzlib

解决方案


您的示例工作正常,尽管它不会做太多。您没有为第二次打印修改 ss 。:) 您的问题更有可能是因为您可能没有静态链接 boost 并且所需的库在路径中不可用 => 它崩溃了。

这是我所拥有的:

> g++ xx.cpp -lboost_iostreams -lboost_serialization
> ./a.out 
1

> echo $?
0

推荐阅读