今年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)