ZLIB靜態庫的編譯
- 下載ZLIB源碼
ZLib官網下載或者GitHub上直接 clone 下來即可
www.zlib.net
截至目前最新版本1.2.1.1本
如下圖我選擇從官網下載
下載完以后解壓得到源代碼目錄結構大致如下amiga
├─contrib
│ ├─ada
│ ├─amd64
│ ├─asm686
│ ├─blast
│ ├─delphi
│ ├─dotzlib
│ │ └─DotZLib
│ ├─gcc_gvmat64
│ ├─infback9
│ ├─inflate86
│ ├─iostream
│ ├─iostream2
│ ├─iostream3
│ ├─masmx64
│ ├─masmx86
│ ├─minizip
│ ├─pascal
│ ├─puff
│ ├─testzlib
│ ├─untgz
│ └─vstudio
│ ├─vc10
│ ├─vc11
│ ├─vc12
│ ├─vc14
│ │ └─x86
│ │ ├─MiniUnzipDebug
│ │ │ └─Tmp
│ │ │ └─miniunz.tlog
│ │ ├─MiniUnzipRelease
│ │ │ └─Tmp
│ │ │ └─miniunz.tlog
│ │ ├─MiniZipDebug
│ │ │ └─Tmp
│ │ │ └─minizip.tlog
│ │ ├─MiniZipRelease
│ │ │ └─Tmp
│ │ │ └─minizip.tlog
│ │ ├─TestZlibDebug
│ │ │ └─Tmp
│ │ │ └─testzlib.tlog
│ │ ├─TestZlibDllDebug
│ │ │ └─Tmp
│ │ │ └─testzlibdll.tlog
│ │ ├─TestZlibDllRelease
│ │ │ └─Tmp
│ │ │ └─testzlibdll.tlog
│ │ ├─TestZlibRelease
│ │ │ └─Tmp
│ │ │ └─testzlib.tlog
│ │ ├─ZlibDllDebug
│ │ │ └─Tmp
│ │ │ └─zlibvc.tlog
│ │ ├─ZlibDllRelease
│ │ │ └─Tmp
│ │ │ └─zlibvc.tlog
│ │ ├─ZlibStatDebug
│ │ │ └─Tmp
│ │ │ └─zlibstat.tlog
│ │ └─ZlibStatRelease
│ │ └─Tmp
│ │ └─zlibstat.tlog
│ └─vc9
├─doc
├─examples
├─msdos
├─nintendods
├─old
│ └─os2
├─os400
├─qnx
├─test
├─watcom
└─win32
打開vs2015開發人員命令工具(管理員身份打開)如下圖
輸入如下命令初始化環境
1.cd vc
按下回車鍵
2.vcvarsall.bat
按下回車鍵
切換到ZLIB源碼根目錄下進入到contrib\masmx86 下 執行如下命令
.\bld_ml32.bat
然后進入到\contrib\vstudio 目錄下 選擇你對應的Visual Studio版本<因為我這里是Visual Studio 2015> 所以我選擇進入\contrib\vstudio\vc14
打開zlibvc.sln 后會看到如下項目
zlibvc 是動態鏈接庫、而我們不是編譯動態鏈接庫所以用不到
我們需要的是zlibstat 這個項目 也就是靜態鏈接庫
編譯這個項目之前不要着急編譯,下面這幾部是必須要做的。
默認情況下Zlibstat 靜態庫也好 或者zlibvc動態庫也好 都是以masmx64位編譯模式來加載文件的如下圖
inffas8664.c
這個文件是masmx64的,但是我們編譯的是x86的也就是32位應用程序的
所以這里我們需要改成contrib\inflate86下的inffas86.c
只需要將inffas8664.c
這個文件從項目中排除,從新添加contrib\inflate86下的inffas86.c
到項目中編譯即可!
這樣編譯的靜態庫再調用minizip 壓縮解壓縮zip文件的時候才不會出錯!