在Windows上使用zlib编译Boost

3
有没有一份关于如何在Windows上使用zlib编译boost的好教程?我查看了boost参考文档,但是它不够清晰明了。我已经下载了zlib的DLL和源代码,并在Visual Studio中进行了引用。但我现在遇到了链接错误。
gzip_decompressor();

完整代码:

using namespace boost::iostreams;
using namespace std;
std::ifstream file("hello.gz", std::ios_base::in | std::ios_base::binary);
filtering_streambuf < input > in;
in.push(gzip_decompressor());
in.push(file);
boost::iostreams::copy(in, std::cout);

我遇到了这个错误:

错误 11 错误 LNK2019:未解析的外部符号“_declspec(dllimport) public: __thiscall boost::iostreams::detail::gzip_header::~gzip_header(void)” (__imp??1gzip_header@detail@iostreams@boost@@QAE@XZ),该符号在函数“public: __thiscall boost::iostreams::basic_gzip_decompressor<V?$allocator@D@std@@@iostreams@boost@@QAE@XZ>::~basic_gzip_decompressor<V?$allocator@D@std@@@iostreams@boost@@@iostreams@boost@@QAE@XZ)”中被引用 –

注:该段内容为IT技术相关的错误提示信息。

你需要更明确地提供你遇到的链接错误和具体的链接。请注意,你必须在项目设置中显式地链接 zlib 和 boost_iostreams,即将它们添加到路径中。(如果这对你有用,请告诉我,我会将其扩展为一个答案。) - undefined
错误 11 错误 LNK2019:未解析的外部符号“__declspec(dllimport) public: __thiscall boost::iostreams::detail::gzip_header::gzip_header(void)”(_imp??1gzip_header@detail@iostreams@boost@@QAE@XZ),在函数“public: __thiscall boost::iostreams::basic_gzip_decompressor<class std::allocator<char> >::basic_gzip_decompressor<class std::allocator<char> >(void)” (??1?$basic_gzip_decompressor@V?$allocator@D@std@@@iostreams@boost@@QAE@XZ) 中引用 - undefined
看着你的链接错误并重复我的第一条评论——你是否确实将boost_iostreams库添加到了你的VS项目的链接器输入中? - undefined
1个回答

5
链接器实际上告诉您它无法找到“basic_gzip_decompressor”。原因是您的boost库中没有构建zlib。

这个SO问题声称有一种解决方案,而不需要将zlib构建到boost库中)

我同意此文档说明有点简洁,但在此处可以找到。如果您的常规构建命令行如下:

b2 -j15 --toolset=msvc --build-type=complete stage 

添加ZLIB的定义以便与zlib一起构建

b2 -j15 --toolset=msvc --build-type=complete stage -s ZLIB_SOURCE="C:\zlib-1.2.8" -s ZLIB_INCLUDE="C:\zlib-1.2.8" 

当您查找配置检查输出时,可以相对快速地检查它是否有效(在编译完成之前)。 应该会显示类似以下内容:

- zlib               : yes  (cached)

似乎不够 - undefined
4
对于在 Windows 上以 64 位模式使用 Intel 编译器的 1.63 Boost 版本,我在 ZLIB_INCLUDE 前面再加一个 -s,像这样:-s ZLIB_INCLUDE=C:\YourPath\To\The\ZlibRootDir\,然后就可以编译而不会出现 zlib.cpp 无法打开 zlib.h 的错误提示。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接