visual-studio-2012 – 在Visual Studio 2012上链接静态ZLIB(1.2.8)

对于上帝的爱,我不能静态链接ZLIB库.我现在已经挣扎了几个小时没有成功.好吧,我已经按照这个 tutorial并成功编译了32位的zlibstat.lib和zlibwapi.lib.设置我的项目以将ZLIB文件夹与库(链接器>常规>其他库目录)一起使用并将zlibwapi.lib(仅)设置为依赖项(链接器>输入>其他依赖项)后,我让它工作了但是,这是一个动态链接(我需要使用ZLIB dll分发我的应用程序).我通常在Debug上使用动态链接,在Release上使用static.

假设“stat”后缀,我试图寻找zlibstat.lib到底是什么以及它用于什么,如果不是静态链接.

是否有任何预处理器要添加到我的项目中,比如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作为依赖项!没有添加其他库!

这个问题可能看起来像this(种类).

我终于设法解决了我的问题.对于那些最终遇到这样一个问题的人,继承人如何解决它:

如果您在我的第一篇文章中按照教程进行操作,那么您将从zlibstat项目的预处理器中删除ZLIB_WINAPI.但是,在设置了我自己的使用ZLIB的项目(设置ZLIB依赖路径,LIB依赖库等)之后,我’意外地’包含/定义了我正在使用ZLIB的头文件中的该死的ZLIB_WINAPI宏,就在包含“zlib之前”. H”.

关于这一点的一个奇怪的事情是,当在调试模式下启动应用程序(使用动态链接)时,一切都成功并且像魅力一样工作,没有任何警告或者无论如何,在发布模式(使用静态链接),它坠毁了.

因此,为了清楚起见,本教程告诉我们从zlibstat项目中删除ZLIB_WINAPI预处理器,该项目生成静态库,而zlibvc项目在其预处理器中具有ZLIB_WINAPI.换句话说,这意味着如果我们为每个配置(调试/发布)使用不同的链接,我们必须添加ZLIB_WINAPI宏!

如果您使用动态链接(zlibwapi.lib)并且zlibvc项目保持未修改(假设您正确地遵循上面链接中的教程),则在包含“zlib.h”之前定义ZLIB_WINAPI宏,如果您从中删除了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>

事情变得非常混乱,我真的希望我足够清楚.

相关文章
相关标签/搜索