2011-11-18 24 views
0

我想要编译这样simple code:与如何在Windows上使用zip(gz)支持分离地构建Boost.Iostreams?

#include <iostream> 
#include <fstream> 
#include <string> 

#include <zlib.h> 

#include <boost/iostreams/filtering_streambuf.hpp> 
#include <boost/iostreams/copy.hpp> 
#include <boost/iostreams/filter/gzip.hpp> 

int main() 
{ 
    std::string hello = "Hello world"; 

    std::ofstream zip_png_file("hello.gz", std::ofstream::binary); 
    boost::iostreams::filtering_streambuf< boost::iostreams::input> in; 
    in.push(boost::iostreams::gzip_decompressor()); 
    in.push(hello); 
    boost::iostreams::copy(in, zip_png_file); 

    std::cin.get(); 

    return 0; 
} 

我已经compioled提升:

-j4 --prefix="C:\Program Files\Boost" --without-mpi --without-python link=static runtime-link=static install 

到那个时候我已经安装在我的系统中没有zlib的的bzip2。现在我静态编译的zlib和bzib2为"C:\Program Files\zlib""C:\Program Files\bzip2"(与艾德里安libinclude文件夹)

我创建简单的VS2010项目,静态链接的提振,加挂拉链包含的文件夹。但不是编译我得到了5个错误:

Error 5 error C1903: unable to recover from previous error(s); stopping compilation c:\program files (x86)\boost-1.47.0\include\boost\iostreams\traits.hpp 242 
Error 1 error C2039: 'category' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>' c:\program files (x86)\boost-1.47.0\include\boost\iostreams\traits.hpp 
Error 2 error C2146: syntax error : missing ';' before identifier 'type' c:\program files (x86)\boost-1.47.0\include\boost\iostreams\traits.hpp 242 
Error 4 error C2208: 'boost::type' : no members defined using this type c:\program files (x86)\boost-1.47.0\include\boost\iostreams\traits.hpp 242 
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\boost-1.47.0\include\boost\iostreams\traits.hpp 242 

所以我想所有boost编译后可以zlib的连接,以提高IOSTREAMS或我必须重建吧],如果是我将添加到我的哪些参数来获得100%静态链接正常Boost + Boost.Iostreams(支持zlib)?

回答

3

首先,即使在正确配置的系统上,代码也不会编译:它尝试使用字符串(不是流)作为源,并且它试图将gzip_decompressor应用于纯ASCII字符串。

下面的代码编译并在Visual Studio 2010 SP1上运行,带有所有默认选项的BoostPro安装程序安装的boost,未安装其他库。

#include <fstream> 
#include <sstream> 
#include <string> 
#include <boost/iostreams/filtering_streambuf.hpp> 
#include <boost/iostreams/copy.hpp> 
#include <boost/iostreams/filter/gzip.hpp> 
int main() 
{ 
    std::string hello = "Hello world"; 
    std::istringstream src(hello); 

    boost::iostreams::filtering_streambuf< boost::iostreams::input> in; 
    in.push(boost::iostreams::gzip_compressor()); 
    in.push(src); 

    std::ofstream zip_png_file("hello.gz", std::ofstream::binary); 
    boost::iostreams::copy(in, zip_png_file); 
} 
相关问题