【发布时间】:2013-11-13 23:23:29
【问题描述】:
我有一个 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"
项目设置:
链接器->常规->附加库依赖:C:\somepath\zlib
链接器->输入->附加依赖:zlibstatic.lib
链接器详细输出(不完整,仅用于 zlib):
Searching C:\somepath\zlib\zlibstatic.lib:
Searching C:\somepath\zlib\zlibstatic.lib:
两个直接命中但它没有做任何事情..
我看到了this 的问题,但我认为我没有这个问题,因为:
- 我没有使用 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"
【问题讨论】:
-
我不是 Windows 用户,但在 UNIX 上,我会验证搜索库的目标是否与需要的库相同,特别是它们使用相同的位数。
-
您是否通过检查 zlibstatic.lib 的内容来检查这些符号“deflateEnd”是否存在?
-
@goldcode:我用文本编辑器打开了这个库,似乎到处都有引用。应该可以。我在谷歌搜索时看到了那个 MSDN 链接,但在我的情况下这不是问题。正如我上面所说,我用 win32 目标构建 zlib,我正在用 win32 目标构建我的项目。任何地方都没有 64 位。
-
尝试在包含 zlib.h 的文件中添加#pragma comment(lib, "zlibstatic.lib")
标签: c++ visual-studio-2010 linker zlib