Hen*_*nri 7 zlib static-linking visual-studio-2012
对于上帝的爱,我不能静态链接ZLIB库.我一直在苦苦挣扎几个小时但没有成功.好吧,我已经按照本教程成功编译了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
Run Code Online (Sandbox Code Playgroud)
链接:
与我添加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>
Run Code Online (Sandbox Code Playgroud)
事情变得非常混乱,我真的希望我足够清楚.
| 归档时间: |
|
| 查看次数: |
6056 次 |
| 最近记录: |