已編譯 Zlib庫-1.2.11(zip解壓庫)- 加載到項目中及其使用方法

第一個版本:

通過加載靜態鏈接庫zlibstat.lib使用zlib

   1). 打開Visual Studio 2010,建立一個Win32 Console Application工程,假設名字是test

   2). 打開"zlib-1.2.5-2\contrib\testzlib\testzlib.c",打開,將其內容複製到新建工程的test.cpp中。

       注意保留 #include "stdafx.h"

       將"if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)"改爲

         "if (ReadFileMemory(argv[1],&lFileSize,(void**)&FilePtr)==0)"

   3). 打開Project -> Property (Alt+F7),在Configuration Properties -> C/C++ -> General -> Additional Include Directories 中增加 "C:\MANUS\CommonSpace\zlib 1.2.5"。我們已經把頭文件zconf.h,zlib.h放到這個文件夾中。

   4). 在Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions 中增加 "ASMV, ASMINF, ZLIB_WINAPI"。根據官方文檔,1.2.5版本需要定義ZLIB_WINAPI。

   5). 在Configuration Properties -> Linker -> General -> Additional Include Directories 中增加 "C:\MANUS\CommonSpace\zlib 1.2.5\Lib Debug"。我們已經把庫文件zlibwapi.dll,zlibwapi.lib,zlibstat.lib放到這個文件夾中。

   6). 在Configuration Properties -> Linker -> Input -> Additional Dependencies 中增加 "zlibstat.lib"。這個是靜態鏈接庫。

   7). 編譯,生成exe文件。

3. 通過加載動態鏈接庫zlibwapi.lib使用zlib

   1). 同2-1)。

   2). 同2-2)。

   3). 同2-3)。

   4). 在Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions 中增加 "_CRT_NONSTDC_NO_DEPRECATE,_CRT_SECURE_NO_DEPRECATE,ZLIB_WINAPI"。根據官方文檔,1.2.5版本需要定義ZLIB_WINAPI。

   5). 同2-5)。

   6). 在Configuration Properties -> Linker -> Input -> Additional Dependencies 中增加 "zlibwapi.lib"。這個是配合動態鏈接庫"zlibwapi.dll"靜態導出庫 。 

   7). 編譯,生成exe文件。

4. 測試

   1). 首先測試使用靜態鏈接庫的版本。將生成的test.exe文件複製到測試文件夾中。並新建一個test.txt文檔,在裏面輸入大量字符。

   2). 通過cmd進入此測試文件夾。輸入命令test.exe test.txt

   3). 觀察壓縮,解壓結果。

   4). 然後測試使用動態鏈接庫的版本。將生成的test.exe文件和zlibwapi.dll文件複製到同一測試文件夾中。並新建一個test.txt文檔,在裏面輸入大量字符。

   5). 通過cmd進入此測試文件夾。輸入命令test.exe test.txt

   6). 觀察壓縮,解壓結果。

 

第二個版本:(主要是如何使用靜態庫)

1.打開VS2013,爲了測試的便捷,我們新建Win32控制檯程序,且項目名稱爲zlibTest;

2.爲了項目的直觀,選中如圖三個文件,右鍵移除,點擊刪除。你可以不必這麼做,只是測試;

3.將已編譯生成的zlib1.2.11靜態庫zlibstat.lib與頭文件zconf.h / zlib.h(zlib1.2.11靜態編譯),一起放入新建的文件夾CommonFiles,移動到與工程同級目錄(你可以放置到喜歡的地方);

4.VS2013解決方案,選擇工程名zlibTest,右鍵屬性,我們修改輸出目錄與工作目錄爲..\..\bin\(勿忘記最後的\),方便調試與直接運行EXE(你可以按照自身的習慣修改);

5.VS2013解決方案,頭文件右鍵,選擇現有項。將CommonFiles裏面的頭文件zconf.h / zlib.h加入工程,且在調用zlib函數的.cpp或者.h文件,使用C調用約定#include包含zlib.h文件(zconf.h不用包含);

6.VS2013解決方案,右鍵屬性,鏈接器,附加依賴項,編輯加入..\..\CommonFiles\zlibstat.lib;

6.1亦可以使用#pragma comment(lib, "..\\..\\CommonFiles\\zlibstat.lib"),你選擇喜歡的方法;

7.至此,我們使用zlib1.2.11靜態庫的環境已經搭好了,過程可以簡略很多,僅爲了方便初學者。讓我們一起調用zlib官方的例子試試吧!

8.好事多磨,不是嗎?。鏈接器報錯說_compress與 _uncompress函數不認識。我們需要在VS2013解決方案,右鍵屬性,C/C++,預處理器定義,加入宏ZLIB_WINAPI,現在再編譯鏈接試試;

9.成功了,兩個警告,一個是zlib官方例子使用strcpy,微軟提示strcpy_s安全點;還有一個是LIBCMT衝突,可以在VS2013解決方案,右鍵屬性,鏈接器,輸入,忽略特定默認庫,編輯加入LIBCMT.lib,我們再重新生成項目看看;

10.執行EXE,成功壓縮與解壓縮。

11.使用zlib靜態庫,提示error LNK2026: 模塊對於 SAFESEH 映像是不安全的。可以在VS2013解決方案,右鍵屬性,鏈接器,命令行,加入/SAFESEH:NO,重新編譯鏈接生成EXE;

12.使用zlib靜態庫,編譯生成文件,提示warning LNK4099: 未找到 PDB“vc120.pdb”(使用“zlibstat.lib(adler32.obj)”...) ...,請將zlib1.2.11靜態編譯中的第12步,生成的vc120.pdb調試信息,拷貝到工程bin目錄或者公共文件CommonFiles目錄,重新編譯鏈接生成EXE就好了(請保證vc120.pdb與zlibstat.lib是同時生成的,.調試信息需要對應);

拷貝vc120.pdb之後,重新生成,無warning LNK4099;

13.發佈Release版本,上方有的操作,需要重複。你可以根據編譯器或者鏈接器提示的錯誤,決定如何做。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章