为什么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 库添加到 运行 目录。所有这些库都需要一起使用,使用哪种压缩算法并不重要。
我正在尝试使用 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 库添加到 运行 目录。所有这些库都需要一起使用,使用哪种压缩算法并不重要。