Почему повышение компрессора zlib вызывает странную ошибку - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь использовать компрессор 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, программа работает, как и ожидалось, но не сжимая ничего. Почему этот код не работает?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

выяснил в чем проблема. Сбой программы из-за того, что я не добавил библиотеки zlib, lzma, bz2 и zstd для запуска каталога. Все эти библиотеки нужны вместе, и не имеет значения, какой алгоритм сжатия вы используете.

0 голосов
/ 04 апреля 2020

Ваш пример работает нормально, но он мало что даст. Вы не изменяете ss для второй печати. :) Скорее всего, ваша проблема заключается в том, что, поскольку вы, вероятно, статически не связываете boost, а требуемые библиотеки недоступны по пути =>, происходит сбой.

Вот что у меня есть:

> g++ xx.cpp -lboost_iostreams -lboost_serialization
> ./a.out 
1

> echo $?
0
...