C ++无法链接Boost库

时间:2011-05-11 01:31:40

标签: c++ linux boost linker qt-creator

我正在尝试从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 / include / qt4 / QtGui -I / usr / include / qt4 -I。 -I ../ teste -I。 -o main.o ../ teste / main.cpp

../ teste / main.cpp:在函数'int main()'中:

../ teste / main.cpp:9:25:错误:'压缩器'未在此范围内声明

../ teste / main.cpp:10:29:错误:'base64_encoder'未在此范围内声明

../ teste / main.cpp:11:37:错误:'file_sink'未在此范围内声明

我知道我可能做了一些愚蠢的事情,但我看不出是什么......

编辑:

顺便说一下,我已经正确安装了所有的库和-dev文件。我正在使用QT-Creator,所以我的.pro文件看起来像这样:

SOURCES += \
    main.cpp

LIBS += \
    -lboost_filesystem \
    -lboost_iostreams 

2 个答案:

答案 0 :(得分:5)

我假设您正在参考

中的示例

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);
}

答案 1 :(得分:0)

示例未完成它只显示了io :: filtering_ostream out的用法;但它无效,因为它没有声明或包括压缩机的必要代码(); base64_encoder和file_sink函数。