2013-04-01 4 views
1

Я пытаюсь использовать boost :: iostreams (1.53.0), чтобы распаковать тело запроса HTTP, а затем обработать его. Но я получаю сбой, когда запускаю следующий код.Сбой при использовании boost :: iostreams

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 (в глядя на стек вызовов).

Я скомпилировал библиотеку boost :: iostreams, а также попытался использовать boost из macports, но происходит тот же самый сбой. Я также попытался использовать gzstream library, но это также сбой в конструкторе, а точнее в конструкторе igzstream.

Я склонен полагать, что это проблема, связанная с zlib. Я не уточнил, я использую MacBook Pro с Mountain Lion и xCode 4.6 для создания и запуска кода.

Перед вами возникла такая проблема?

+0

Можете ли вы приложить отладчик и отправить трассировку стека аварии? –

+0

Вы подтвердили, что argv [1] фактически указывает на файл? – Zac

+0

@Zac Сбой gzip_decompressor() не имеет ничего общего с поставляемым argv. Тем не менее, он указывает на правильный путь к файлу. – afp

ответ

1

Я нашел проблему: компилятор LLVM от Apple. Я был уверен, что использую GCC, но, похоже, я не был.

Я обнаружил это, споткнувшись о другой странный крах, который произошел, просто создав объект std::string. Это заставило меня проверить настройки проекта, где я обнаружил, что использую компилятор LLVM, который, вероятно, был недоволен тем, что я связываю библиотеки, построенные на gcc.

Спасибо за ваши ответы.

Смежные вопросы