vs2010 上的 Zlib 链接器错误
Zlib linker error on vs2010
我有一个 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
在文件中包含 zlib.h,如下所示:
#ifdef WIN32
# define ZLIB_WINAPI
#endif
#include "zlib.h"
项目设置:
Linker->General->其他库依赖项:C:\somepath\zlib
Linker->Input->其他依赖项:zlibstatic.lib
链接器详细输出(不是完整的,仅适用于 zlib):
Searching C:somepathzlibzlibstatic.lib:
Searching C:somepathzlibzlibstatic.lib:
两次直接命中,但它什么也没做..
我看到了这个问题,但我认为我没有这个问题,因为:
- 我没有使用contrib解决方案,我用cmake -G生成了一个"Visual Studio 10"
- 我在包含之前ZLIB_WINAPI定义为评论到顶部答案建议。
它实际上是一个开源项目,所以如果有人可以尝试重现问题:
- 克隆 https://github.com/d1zzy/pvpgn.git
- 添加 zlib 库并将文件包含到 pvpgn/pvpgn/zlib(或其他任何地方,只需使用自定义 zlib 路径编辑 cmake/Modules/FindZLIB.cmake )
- 运行cmake -G"Visual Studio 10",打开解决方案并尝试构建项目"bnetd"
这听起来像是zlibstatic.lib中的符号与您正在寻找的符号不匹配通过您的包含。请尝试:
在窗口上打开命令提示符
更改为 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin(或您的 VS 安装目录)
执行 VCVARS32.bat
dumpbin zlibstatic.lib/symbol> symbols.txt
检查符号.txt for DeflateEnd, Deflate, and DeflateInit
我的输出如下所示:
026 00000AA0 SECT4 notype () External | _deflate
011 00000000 UNDEF notype () External | _deflateInit_
02C 00001AC0 SECT4 notype () External | _deflateEnd
我的猜测是你的垃圾箱输出看起来和我的一样。现在将我的输出与您丢失的符号进行比较
您缺少的符号:_deflateEnd@4、_deflate@8和放气Init@16
@X后缀给了我一个提示,表明您的代码正在标准调用约定中查找该函数但是您的库是使用 C 调用约定构建的。
void _cdecl deflate(); // ==> _deflate
void __stdcall deflate(); // ==> _deflate@8
尝试在没有定义的情况下包含"zlib.h"ZLIB_WINAPI但最终用 dumpbin 转储符号应该会给你一个线索。
另一种可能性 - 您可能已经编译了 zlibstatic.lib #define Z_PREFIX
我在Visual Studio 2015中遇到了同样的问题,我假设.lib是使用"ZBLI_WINAPI"预处理器定义编译的,正如Markus Schumann所提到的。
右键单击 C/C++> 预处理器>项目>属性,将"ZBLI_WINAPI"添加到"预处理器定义"并重建为我解决了它。
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- 静态库中的 g++ 错误链接函数
- 未定义的参考错误链接天然函数Android
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- C 错误链接器命令失败了出口代码1(使用-V查看调用)
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 聚输出错误 - 链接列表
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接