编译和使用zlib

  由于要弄一个项目,在windows下用到zlib库,现成的库都是release版本的,如果项目是debug的就会导致一大堆符号错误,无奈只得自己重新编译zlib库。

首先下载 源码和工程文件

解压到某个目录

开启VS2010 的命令行 32bit

进入到zlib-1.2.5\contrib\masmx86目录

执行bld_ml32.bat

打开工程项目zlib-1.2.5\contrib\vstudio\vc10\zlibvc.sln

编译整个solution(包括 debug 和 Release)

  此时已经得到了4个文件 zlibwapi.dll zlibwapi.lib zlibwapid.dll zlibwapid.lib 其中 lib 文件是连接期间用到的,dll文件是运行时候用到的。还有两个头文件 zconf.h zlib.h 是在编译期间用到。关于lib 和dll 关系和区别可见链接

  把得到的lib文件放在VS工程目录下,在 属性 -> 连接器 -> 输入 -> 附加依赖项 一栏里面把刚才得到的lib文件加进去,注意末尾带有 d 的表示debug版。

此时编译,链接依然有错:

error LNK2019: 无法解析的外部符号 _compress

  在 VS 2010 下通过 dumpbin 命令查看lib导出函数 :

dumpbin /exports XXX.lib

可以看到 有compress 的导出。

      ordinal    name

             1    _adler32@12
           140    _adler32_combine@12
            39    _compress2@20
             2    _compress@16

经过网上查询,发现是要在vs2010的WIN32环境下加入 ZLIB_WINAPI的宏定义才行:

#define ZLIB_WINAPI
#include "zconf.h"

注意这个宏定义要加在 zconf.h 包含之前,如果加载了 zconf.h 之后也不行。
此时编译一切顺利。

参考链接

发布了43 篇原创文章 · 获赞 21 · 访问量 31万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章