今年4月zlib發(fā)布了1.2.5版,修正了幾個(gè)bug,增加了新功能(目前我還用不上).
最近準(zhǔn)備在自己的程序中用這個(gè)版本。結(jié)果怎么也編譯通不過。折騰了我一整天才搞定,發(fā)現(xiàn)是兩個(gè)小的設(shè)置沒有弄好。哎。。。
新的1.2.5版本只提供了vc9、vc10兩個(gè)project配置文件.我用項(xiàng)目版本轉(zhuǎn)換文件怎么也不能轉(zhuǎn)到vc7.1下。沒辦法只好裝了一個(gè)vc2008重新編譯。
把zlib 1.2.5加入自己的項(xiàng)目,編譯時(shí)有兩點(diǎn)要注意
1.就是zlib 1.2.5源代碼包中\(zhòng)contrib\vstudio\readme.txt中說的在使用zlib要預(yù)定義宏ZLIB_WINAPI,否則無法編譯通過。
- To use zlibwapi.dll in your application, you must define the macro ZLIB_WINAPI when compiling your application's source files.
2.鏈接時(shí),除了#pragma comment(lib, "zlibvc.lib")添加引入庫外,還要注意Character Set的設(shè)置要統(tǒng)一。否則也會(huì)出現(xiàn)鏈接錯(cuò)誤,提示找不到_compress外部變量。
后記(2011-6-19)
我的編程環(huán)境已升級VS2008,又想在項(xiàng)目中使用ASM版本的ZLIB,重新從zlib.net下載后,直接使用zlib-1.2.5\contrib\vstudio\vc9下的zlibvc項(xiàng)目文件編譯出錯(cuò)。發(fā)現(xiàn)是zlib-1.2.5\contrib\masmx86下的OBJ文件沒有生成。進(jìn)入VS2008命令行環(huán)境,運(yùn)行bld_ml32.bat生成兩個(gè)obj文件。重新在集成環(huán)境下編譯就沒問題了。但是如果是使用ZLIB的靜態(tài)庫版本,一定注意要將這兩個(gè)obj文件包含到最終的zlibvc.lib中去。否則在自己的應(yīng)用項(xiàng)目中編譯時(shí)會(huì)提示如下錯(cuò)誤。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
把兩個(gè)obj文件包含到zlibvc.lib的方法是,Project->Property->Librarian->Additional Dependencies 加入inffas32.obj match686.obj,同時(shí)Additional Library Directories設(shè)置正確。
另外,如果使用命令行編譯進(jìn)入zlib-1.2.5\win32目錄運(yùn)行下面的命令就可以了。
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)