1

我正在尝试使用 boost::iostreams(1.53.0) 解压缩 HTTP 请求正文并稍后处理它。但是当我运行以下代码时,我遇到了崩溃。

try {
    using namespace boost::iostreams;
    ifstream file(argv[1], std::ios_base::in | std::ios_base::binary);
    boost::iostreams::filtering_istream in;
    in.push(gzip_decompressor());
    in.push(file);
    std::stringstream strstream;
    boost::iostreams::copy(in, strstream);
} catch (std::exception& e) {
    cout << e.what() << endl;
}

崩溃发生在 中gzip_decompressor(),更具体地说,发生在gzip_header() { reset(); }boost 的 gzip.hpp 中(通过查看调用堆栈)。

我自己编译了 boost::iostreams 库,还尝试使用 macports 的 boost,但发生了同样的崩溃。我也尝试过使用gzstream 库,但是在构造函数中也会崩溃,更具体地说是在igzstream.

我倾向于认为这是一个与 zlib 相关的问题。我没有具体说明,我使用的是带有 Mountain Lion 和 xCode 4.6 的 MacBook Pro 来构建和运行代码。

你们之前有没有遇到过这样的问题?

4

1 回答 1

1

我发现了问题:Apple 的 LLVM 编译器。我确定我使用的是 GCC,但似乎不是。

我偶然发现了另一个奇怪的崩溃,这只是通过实例化一个std::string对象而发生的。这让我检查了项目设置,发现我正在使用 LLVM 编译器,这可能对我链接 gcc 构建的库不满意。

感谢您的回复。

于 2013-04-02T20:03:50.700 回答