編譯和使用zlib

xianjian_x發表於2016-05-14

  由於要弄一個專案,在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 之後也不行。
此時編譯一切順利。

參考連結

相關文章