cen*_*cen 1 c++ linker zlib visual-studio-2010
我有一个zlib链接器错误.花了几个小时尝试解决问题,但到目前为止还没有.Zlib是使用vs2010,win32版本构建的.我的项目使用相同的.
错误提取:
error LNK2019: unresolved external symbol _deflateEnd@4 referenced in function
error LNK2019: unresolved external symbol _deflate@8 referenced in function
error LNK2019: unresolved external symbol _deflateInit_@16 referenced in function
Run Code Online (Sandbox Code Playgroud)
在文件中包含zlib.h,如下所示:
#ifdef WIN32
# define ZLIB_WINAPI
#endif
#include "zlib.h"
Run Code Online (Sandbox Code Playgroud)
项目设置:
链接器 - >常规 - >附加库依赖项:C:\ somepath\zlib
链接器 - >输入 - >附加依赖项:zlibstatic.lib
链接器详细输出(不完整,仅适用于zlib):
Searching C:\somepath\zlib\zlibstatic.lib:
Searching C:\somepath\zlib\zlibstatic.lib:
Run Code Online (Sandbox Code Playgroud)
两个直接命中但它没有做任何事情..
我看到了这个问题,但我不认为我有这个问题,因为:
它实际上是一个开源项目,所以如果有人可以尝试重现问题:
这听起来像是zlibstatic.lib中的符号与您通过include中寻找的符号不匹配.请试试:
在Windows上打开命令提示符
更改为C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\bin(或您的VS安装目录)
执行vcvars32.bat
dumpbin zlibstatic.lib/symbols> symbols.txt
检查symbols.txt中的deflateEnd,deflate和deflateInit
我的输出看起来像这样:
026 00000AA0 SECT4 notype () External | _deflate
011 00000000 UNDEF notype () External | _deflateInit_
02C 00001AC0 SECT4 notype () External | _deflateEnd
Run Code Online (Sandbox Code Playgroud)
我的猜测是你的dumpbin输出与我的相同.现在将我的输出与缺失的符号进行比较
你缺少的符号:_deflateEnd @ 4,_deflate @ 8和deflateInit @ 16
@X postfix给我一个提示,你的代码正在寻找标准调用约定中的函数,但你的库是使用c调用约定构建的.
void _cdecl deflate(); // ==> _deflate
void __stdcall deflate(); // ==> _deflate@8
Run Code Online (Sandbox Code Playgroud)
尝试在没有定义ZLIB_WINAPI的情况下包含"zlib.h",但最终使用dumpbin转储符号会给你一个线索.
另一种可能性 - 您可能已经使用#define Z_PREFIX编译了zlibstatic.lib
| 归档时间: |
|
| 查看次数: |
4091 次 |
| 最近记录: |