C ++ Не могу связать библиотеку Boost - PullRequest
1 голос
/ 11 мая 2011

Я пытаюсь скомпилировать этот маленький кусочек кода из документации Boost: (http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/tutorial/filter_usage.html)

#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/filtering_stream.hpp>

namespace io = boost::iostreams;

int main()
{   
    io::filtering_ostream out;
    out.push(compressor());
    out.push(base64_encoder());
    out.push(file_sink("my_file.txt"));
    // write to out using std::ostream interface
}

Но компиляция отказывается, я получаю следующие ошибки:

g ++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I / usr / share / qt4 / mkspecs / linux-g ++ -I ../ teste -I / usr / include / qt4 / QtCore -I / USR / включать / Qt4 / QtGui -I / USR / включать / Qt4 -I. -I ../ teste -I. -o main.o ../teste/main.cpp

.. / Teste / main.cpp: В функции 'INT основной ():

.. / Teste / main.cpp: 9: 25: ошибка: «компрессор» не был объявлен в этой области

.. / Teste / main.cpp: 10: 29: ошибка: «base64_encoder» не был объявлен в этой области

.. / Teste / main.cpp: 11: 37: ошибка: «file_sink» не был объявлен в этой области

Я знаю, что, вероятно, делаю что-то глупое, но я просто не вижу, что ...

редактирование:

Кстати, у меня все библиотеки boost и файлы -dev установлены правильно. и я использую QT-Creator, поэтому мой файл .pro выглядит так:

SOURCES += \
    main.cpp

LIBS += \
    -lboost_filesystem \
    -lboost_iostreams 

Ответы [ 2 ]

5 голосов
/ 11 мая 2011

Полагаю, вы ссылаетесь на пример по адресу

http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/tutorial/filter_usage.html

Если вы внимательно прочитаете, вы заметите, что на странице учебника указано, что

Если у вас есть соответствующий компрессор OutputFilters и base64_encoder, вы можете сделать это следующим образом

Код на этой странице примера не предназначен для компиляции.Попробуйте вместо этого следующий пример:

http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/classes/zlib.html#examples

... но обязательно добавьте еще using namespace boost::iostreams, чтобы иметь возможность его скомпилировать, например:

#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>

int main() 
{
    using namespace std;
    using namespace boost::iostreams;

    ifstream file("hello.z", ios_base::in | ios_base::binary);
    filtering_streambuf<input> in;
    in.push(zlib_decompressor());
    in.push(file);
    boost::iostreams::copy(in, cout);
}
0 голосов
/ 11 мая 2011

Пример не завершен, он просто показывает использование io :: filtering_ostream out; но он недействителен, так как не объявляет или не включает необходимый код для компрессора (); Функции base64_encoder и file_sink.

...