为了上帝的爱,我无法静态链接ZLIB库。我已经奋斗了几个小时,没有成功。好吧,我已按照本教程进行操作,并成功地将zlibstat.lib和zlibwapi.lib编译为32位。建立我的项目使用ZLIB文件夹与库(链接>常规>附加库目录),并设置zlibwapi.lib(只)作为依赖关系(链接器>输入>附加依赖)后,我它得到的工作,但是,是一个动态链接(我需要使用ZLIB dll分发我的应用程序)。我通常在Debug上使用动态链接,在Release上使用静态链接。
我尝试查找zlibstat.lib到底是什么以及它的用途(如果不是用于静态链接的话),并假设后缀为“ stat”。
是否有任何预处理器要添加到我的项目中(例如ZLIB_STATIC之类的东西),以使用ZLIB的静态链接?或者我应该从未从zlibstat项目中删除ZLIB_WINAPI,就像上面的链接告诉我要做的那样吗?静态链接ZLIB是不可能的吗(那么zlibstat.lib是做什么用的?)?
我很迷路。任何帮助是极大的赞赏。
编辑(其他信息):
错误:
error LNK2001: unresolved external symbol _inflateInit_@12
error LNK2001: unresolved external symbol _inflate@8
error LNK2001: unresolved external symbol _inflateEnd@4
连结:
与我将zlibwapi.lib添加为依赖项的动态链接(起作用的)不同,对于静态链接,我试图实现的是我将zlibstat.lib添加为依赖项!没有添加其他库!
这个问题可能看起来像这样(有点)。
我终于设法解决了我的问题。对于那些最终遇到这种问题的人,以下是解决方法:
如果你跟着我的第一篇教程,你会删除ZLIB_WINAPI
从zlibstat项目的预处理器。但是,在设置了自己的使用ZLIB的项目(设置ZLIB依赖项路径,LIB依赖项库等)之后,我“意外地”ZLIB_WINAPI
在使用ZLIB的头文件中包含/定义了该死的宏,就在包含“ zlib.h”之前”。
对此感到奇怪的是,当在调试模式下(使用动态链接)启动应用程序时,一切都成功了,并且运行得很好,没有任何警告,或者在发布模式下(使用静态链接),它崩溃了。
因此,为了清楚起见,本教程告诉我们从zlibstat项目中删除ZLIB_WINAPI
预处理器,该项目会生成静态库,而zlibvc项目的ZLIB_WINAPI
预处理器中包含。换句话说,这意味着如果我们为每个配置(调试/发行版)使用不同的链接,则必须添加ZLIB_WINAPI
或不添加宏!
ZLIB_WINAPI
如果使用动态链接(zlibwapi.lib),并且在zlibvc项目保持不变的情况下(假设您正确地遵循了上面的链接的说明),则在包含“ zlib.h”之前定义宏,并且如果ZLIB_WINAPI
从zlibstat中删除了该宏,则不要定义该宏项目(如本教程告诉我们的那样)!
我在自己的项目中使用的一个有用的宏如下:
// Since we used dynamic linking for debug, we have to define the ZLIB_WINAPI
#if defined(_WIN32) && defined(_DEBUG)
#define ZLIB_WINAPI
#endif
#include <zlib.h>
事情变得非常混乱,我真的希望我足够清楚。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句