【问题标题】:unresolved external symbol inflateEnd (and others) while using boost Zlib使用 boost Zlib 时未解析的外部符号 inflateEnd (和其他)
【发布时间】:2015-09-21 10:12:30
【问题描述】:

我正在将 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 文件到底在哪里?

【问题讨论】:

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


    【解决方案1】:

    我遇到了同样的问题,为了解决我从 zlib 下载源代码并在本地构建 x64 dll/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 项目属性 -> 链接器 -> 高级 -> 图像具有安全异常处理程序 -> 设置为否 (/SAFESEH:NO)。 SAFESEH信息:Compiling libffi with VS2012 fails with fatal error LNK1281: Unable to generate SAFESEH image

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多