今年4月zlib发布了1.2.5版,修正了几个bug,增加了新功能(目前我还用不上).
最近准备在自己的程序中用这个版本。结果怎么也编译通不过。折腾了我一整天才搞定,发现是两个小的设置没有弄好。哎。。。
新的1.2.5版本只提供了vc9、vc10两个project配置文件.我用项目版本转换文件怎么也不能转到vc7.1下。没办法只好装了一个vc2008重新编译。
把zlib 1.2.5加入自己的项目,编译时有两点要注意
1.就是zlib 1.2.5源代码包中\contrib\vstudio\readme.txt中说的在使用zlib要预定义宏ZLIB_WINAPI,否则无法编译通过。
- To use zlibwapi.dll in your application, you must define the macro ZLIB_WINAPI when compiling your application's source files.
2.链接时,除了#pragma comment(lib, "zlibvc.lib")添加引入库外,还要注意Character Set的设置要统一。否则也会出现链接错误,提示找不到_compress外部变量。
后记(2011-6-19)
我的编程环境已升级VS2008,又想在项目中使用ASM版本的ZLIB,重新从zlib.net下载后,直接使用zlib-1.2.5\contrib\vstudio\vc9下的zlibvc项目文件编译出错。发现是zlib-1.2.5\contrib\masmx86下的OBJ文件没有生成。进入VS2008命令行环境,运行bld_ml32.bat生成两个obj文件。重新在集成环境下编译就没问题了。但是如果是使用ZLIB的静态库版本,一定注意要将这两个obj文件包含到最终的zlibvc.lib中去。否则在自己的应用项目中编译时会提示如下错误。1>zlibr.lib(inflate.obj) : error LNK2001: unresolved external symbol _inflate_fast
1>zlibr.lib(deflate.obj) : error LNK2001: unresolved external symbol _longest_match
1>zlibr.lib(deflate.obj) : error LNK2001: unresolved external symbol _match_init
把两个obj文件包含到zlibvc.lib的方法是,Project->Property->Librarian->Additional Dependencies 加入inffas32.obj match686.obj,同时Additional Library Directories设置正确。
另外,如果使用命令行编译进入zlib-1.2.5\win32目录运行下面的命令就可以了。
nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj" (use ASM code, x86)
nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF" OBJA="inffasx64.obj gvmat64.obj inffas8664.c" (use ASM code, x64)