由于要弄一个项目,在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 之后也不行。
此时编译一切顺利。