已编译 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版本,上方有的操作,需要重复。你可以根据编译器或者链接器提示的错误,决定如何做。

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