为什么boost zlib压缩器会抛出奇怪的错误

Why does boost zlib compressor throw weird error

我正在尝试使用 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 的行时,程序按预期运行,但没有压缩任何内容。为什么此代码不起作用?

您的示例运行良好,但作用不大。您没有为第二次打印修改 ss 。 :) 您的问题更有可能是因为您可能没有静态链接 boost 并且所需的库在路径中不可用 => 它崩溃了。

这是我的:

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

> echo $?
0

找出问题所在。程序崩溃是因为我没有将 zlib、lzma、bz2 和 zstd 库添加到 运行 目录。所有这些库都需要一起使用,使用哪种压缩算法并不重要。