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