使用boost Zlib

时间:2015-09-21 10:12:31

标签: c++ visual-studio-2010 boost zlib

我正在将32位项目转换为x64。在大多数情况下,它只是意味着将64附加到库路径(并最终为x64构建这些库)。现在我假设所有库已经准备就绪,代码也是x64兼容的。但是我一直在为boost zlib库收到错误,比如:

error LNK2019: unresolved external symbol inflateEnd
error LNK2019: unresolved external symbol inflate
error LNK2019: unresolved external symbol inflateInit_
error LNK2019: unresolved external symbol deflateEnd
error LNK2019: unresolved external symbol deflate
error LNK2001: unresolved external symbol "int const boost::iostreams::zlib::default_compression"
error LNK2001: unresolved external symbol "int const boost::iostreams::zlib::deflated"
error LNK2001: unresolved external symbol "int const boost::iostreams::zlib::default_strategy"

我为链接器启用了详细模式(在MS Visual Studio中,您可以通过将/VERBOSE:LIB添加到其他链接器选项来实现此目的)。多亏了这一点,我可以看到这个输出行:

Searching .\..\..\libs\boost145\stage\lib64\libboost_zlib-vc100-mt-gd-1_45.lib

这意味着在boost145\stage\lib64中找到了该库。那么我现在应该寻找什么?

一个奇怪的事情是,定义第一组缺失符号的文件(不在boost内的符号)包含项目中的头文件zlib.hzconf.h。也许这是一些暗示? zlib.h将外部符号定义为:

ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));

明显的问题是:这个头文件的lib文件到底在哪里?

1 个答案:

答案 0 :(得分:1)

我有同样的问题,解决我从zlib下载源代码并在本地构建x64 dlls / libs的错误。解决方案文件下载有几个问题,修复方法如下所述。

Zlib 1.2.8源代码:http://zlib.net/zlib128.zip

VS2012的解决方案文件位于:zlib-1.2.8 \ contrib \ vstudio \ vc11 \ zlibvc.sln

修正:

  1. 变化: <Command>cd ..\..\..\contrib\masmx64 bld_ml64.bat</Command>

    于: <Command>cd ..\..\contrib\masmx64 bld_ml64.bat</Command>

  2. 在zlibvc项目属性中 - &gt;链接器 - &gt;高级 - &gt;图像具有安全异常处理程序 - &gt;设为No(/ SAFESEH:NO)。有关SAFESEH的信息:Compiling libffi with VS2012 fails with fatal error LNK1281: Unable to generate SAFESEH image