对于上帝的爱,我不能静态链接ZLIB库。我一直在苦苦挣扎几个小时但没有成功。好吧,我已经跟着这个tutorial并成功编译了32位的zlibstat.lib和zlibwapi.lib。设置我的项目以将ZLIB文件夹与库(链接器&gt;常规&gt;其他库目录)一起使用并将zlibwapi.lib(仅)设置为依赖项(链接器&gt;输入&gt;其他依赖项)后,我将其设置为<然而,强>工作,这是动态链接(我需要使用ZLIB dll分发我的应用程序)。我通常在Release上使用动态链接和在Release上使用静态。
我已经尝试过寻找zlibstat.lib到底是什么以及它用于什么,如果不是静态链接,假设“stat”后缀。
是否有任何预处理器要添加到我的项目中,比如ZLIB_STATIC或类似东西,要使用ZLIB的静态链接,还是我从未从zlibstat项目中删除ZLIB_WINAPI,就像上面的链接告诉我的那样?静态链接ZLIB是不可能的(那么,zlibstat.lib是什么?)?
我很丢失。非常感谢任何帮助。
修改(额外信息):
错误:
abs(dot(c - a, v)) < w / 2
链接:
与我添加zlibwapi.lib作为依赖项的动态链接(有效)不同,对于我想要实现的静态链接,我添加了zlibstat.lib作为依赖项!没有添加其他库!
此问题可能看起来像this(种类)。
答案 0 :(得分:6)
我终于设法解决了我的问题。对于那些最终遇到这种问题的人来说,他是如何解决的:
如果您在我的第一篇文章中按照教程操作,那么您将从 zlibstat 项目的预处理器中删除ZLIB_WINAPI
。但是,在设置了我自己的项目(设置ZLIB依赖项路径,LIB依赖项库等)后,使用ZLIB,我意外地&#39;在包含&#34; zlib.h&#34;之前,使用ZLIB在头文件中包含/定义该死的ZLIB_WINAPI
宏。
关于这一点的一个奇怪的事情是,当在调试模式下启动应用程序(使用动态链接)时,一切都成功并且像魅力一样工作,没有任何警告或者无论如何,在发布模式(使用静态)它已经崩溃了。
因此,为了清楚起见,本教程告诉我们从zlibstat项目中删除ZLIB_WINAPI
预处理器,这会生成静态库,而 zlibvc项目具有其预处理器中的ZLIB_WINAPI
。换句话说,这意味着如果我们为每个配置(调试/发布)使用不同的链接,我们必须添加ZLIB_WINAPI
宏!
在包含&#34; zlib.h&#34;之前定义ZLIB_WINAPI
宏。如果您使用动态链接(zlibwapi.lib)并且 zlibvc 项目保持不变(假设您正确地遵循了上面链接中的教程),并且如果您从中移除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>
事情变得非常混乱,我真的希望我足够清楚。