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(); }はブーストの gzip.hpp で発生します (コール スタックを参照)。

boost::iostreams ライブラリを自分でコンパイルし、macports からのブーストも使用しようとしましたが、同じクラッシュが発生します。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 に答える