我正在将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.h
和zconf.h
。也许这是一些暗示? zlib.h
将外部符号定义为:
ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
明显的问题是:这个头文件的lib文件到底在哪里?
答案 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
修正:
变化:
<Command>cd ..\..\..\contrib\masmx64
bld_ml64.bat</Command>
于:
<Command>cd ..\..\contrib\masmx64
bld_ml64.bat</Command>
在zlibvc项目属性中 - &gt;链接器 - &gt;高级 - &gt;图像具有安全异常处理程序 - &gt;设为No(/ SAFESEH:NO)。有关SAFESEH的信息:Compiling libffi with VS2012 fails with fatal error LNK1281: Unable to generate SAFESEH image