編譯和使用zlib

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

參考鏈接

發佈了43 篇原創文章 · 獲贊 21 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章