c++ - 为什么 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 的行时,程序按预期工作,但没有压缩任何东西。为什么这段代码不起作用?
解决方案
您的示例工作正常,尽管它不会做太多。您没有为第二次打印修改 ss 。:) 您的问题更有可能是因为您可能没有静态链接 boost 并且所需的库在路径中不可用 => 它崩溃了。
这是我所拥有的:
> g++ xx.cpp -lboost_iostreams -lboost_serialization
> ./a.out
1
> echo $?
0
推荐阅读
- python - 多标签情感分类
- json - 如何使用 QT 读写 JSON 文件
- sql - 选择具有特定值的所有列
- azure - 存储 blob delete-batch 删除所有 blob,不包括具有相似名称的两个目录
- java - 如何在不将业务逻辑放在转换器类中的情况下将 DTO 转换为实体?
- oauth-2.0 - 使用 SSO 保护托管在 openshift 上的应用程序
- android-studio - 尝试运行颤振应用程序并失败说构建失败并出现异常
- list - 努力在 Haskell 中提取列表的一部分
- ms-access - Sharepoint 服务器和 Access 之间的连接
- vue.js - VUE 如何点击图片并重定向到页面?