文章目录
简介
zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发。使用时一般编译为库,根据需求可能有四种组合,即Debug-32位、Debug-64位、Release-32位、Release-64位。
目标
编译出以上四种库并简单测试。
阅读基础
- 了解CMake的使用。
- 了解VS的使用。
快速阅读
了解的部分跳过。
环境说明
- 操作系统:Windows10-64bit
- VS版本:VS2019
- CMake版本:3.21.0-rc1
- zlib版本:zlib1.2.11
相关软件介绍
VS
Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括[Microsoft Windows](https://baike.baidu.com/item/Microsoft Windows)、[Windows Mobile](https://baike.baidu.com/item/Windows Mobile/749381)、[Windows CE](https://baike.baidu.com/item/Windows CE)、[.NET Framework](https://baike.baidu.com/item/.NET Framework)、[.NET Compact Framework](https://baike.baidu.com/item/.NET Compact Framework/1926409)和Microsoft Silverlight 及[Windows Phone](https://baike.baidu.com/item/Windows Phone/9227600)。
Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2019 版本,基于.NET Framework 4.8 。
2021年4月19日,微软宣布2021年夏季发布 Visual Studio 2022 的首个预览版。
2021年6月17日,首个预览版 Visual Studio 2022 Preview 1 正式发布 ,并且首次发布64位版本。
CMake
CMake是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程。CMake可以运行在Windows和Linux环境下,根据配置的编译器不同,生成符合所在操作系统的Makefile文件,在Windows下可以生成VS的工程文件系统。
然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
zlib
今天,zlib是一种事实上的业界标准,以至于在标准文档中,zlib和DEFLATE常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库,包括:
- Linux核心:使用zlib以实作网络协定的压缩、档案系统的压缩以及开机时解压缩自身的核心。
- libpng,用于PNG图形格式的一个实现,对bitmap数据规定了DEFLATE作为流压缩方法。
- Apache:使用zlib实作http 1.1。
- OpenSSH、OpenSSL:以zlib达到最佳化加密网络传输。
- FFmpeg:以zlib读写Matroska等以DEFLATE算法压缩的多媒体串流格式。
- rsync:以zlib最佳化远端同步时的传输。
- dpkg和RPM软件包管理器,使用zlib从压缩软件包中解压文件。
- Subversion 、Git和 CVS 版本控制 系统,使用zlib来压缩和远端仓库的通讯流量。
- dpkg和RPM等包管理软件:以zlib解压缩RPM或者其他封包。
因为其代码的可移植性,宽松的许可以及较小的内存占用,zlib在许多嵌入式设备中也有应用。
软件下载安装配置
VS2019
下载安装配置参考:VS2019+Qt5.15开发环境搭建_心飞的博客-CSDN博客
CMake
下载安装配置参考:【1】CMake使用Qt自带MinGW编译OpenCV3.4.14_心飞的博客-CSDN博客
zlib
点击链接zlib1.2.11官网下载
进入zlib官网下载,本文编写时最新版时zlib1.2.11。如下图:
找到下载链接–》点击下载。提供了三种压缩包,根据需求下载。如下图:
下载成功!如下图:
新建一个文件夹zlib1211
并在其中解压zlib1.2.11。如下图:
准备工作完成。
CMake+MSVC编译
准备工作
打开CMake
在开始菜单找到CMake,点击CMake(cmake-gui)
打开CMake。如下图:
打开CMake后。如下图:
保存zlib.h和zconfig.h
编译之前就复制一份出来备用,使用cmake编译后zconfig.h
编译后会被改为zconf.h.included
,zlib.h
编译后会被改为zlib.h.included
。
编译Debug-32位
创建编译后文件存放的文件夹
配置CMake
- 指定源码目录
- 编译输出目录
- 进入Config
- 选择合适的Visual Studio版本)
- 选择计算机类型
- 结束配置Finish,会提示“Configuring done”
- 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:
VS编译静态库动态库
进入CMake选择的输出文件夹,发现生成了一个VS项目。如下图:
双击zlib.sln
,打开项目。如下图:
右键zlibstatic–》生成以及右键zlib-》生成,如下图:
在xxx\build-32\Debug
中分别生成了静态库和动态库。如下图:
制作库模块
将动态库、静态库和头文件复制出来备用。
建立目录zlib-1.2.11-cmake-debug-msvc32
,在其下再建立四个空目录bin、include、lib、share
如下图:
复制生成的zlibd.dll
和对应的导入库zlibd.lib
到share
目录中保存。如下图:
复制生成的静态链接库zlibstaticd.lib
到lib
目录中保存。如下图:
复制之前备用的头文件zconf.h、zlib.h
到include
目录中保存,如下图:
编译Release-32位
创建编译后文件存放的文件夹
配置CMake
- 指定源码目录
- 编译输出目录
- 进入Config
- 选择合适的Visual Studio版本)
- 选择计算机类型
- 结束配置Finish,会提示“Configuring done”
- 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:
VS编译静态库动态库
进入CMake选择的输出文件夹,发现生成了一个VS项目。如下图:
双击zlib.sln
,打开项目,设置为Release-32位。如下图:
右键zlibstatic–》生成以及右键zlib-》生成,如下图:
在xxx\build-32\Release
中分别生成了静态库和动态库。如下图:
制作库模块
将动态库、静态库和头文件复制出来备用。
建立目录zlib-1.2.11-cmake-release-msvc32
,在其下再建立四个空目录bin、include、lib、share
如下图:
复制生成的zlibd.dll
和对应的导入库zlibd.lib
到share
目录中保存。如下图:
复制生成的静态链接库zlibstaticd.lib
到lib
目录中保存。如下图:
复制之前备用的头文件zconf.h、zlib.h
到include
目录中保存,如下图:
功能测试
见Zlib库使用测试对应的版本。
编译Debug-64位
创建编译后文件存放的文件夹
配置CMake
- 指定源码目录
- 编译输出目录
- 进入Config
- 选择合适的Visual Studio版本)
- 选择计算机类型
- 结束配置Finish,会提示“Configuring done”
- 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:
VS编译静态库动态库
进入CMake选择的输出文件夹,发现生成了一个VS项目。如下图:
双击zlib.sln
,打开项目。如下图:
右键zlibstatic–》生成以及右键zlib-》生成,如下图:
在xxx\build-32\Debug
中分别生成了静态库和动态库。如下图:
制作库模块
将动态库、静态库和头文件复制出来备用。
建立目录zlib-1.2.11-cmake-debug-msvc64
,在其下再建立四个空目录bin、include、lib、share
如下图:
复制生成的zlibd.dll
和对应的导入库zlibd.lib
到share
目录中保存。如下图:
复制生成的静态链接库zlibstaticd.lib
到lib
目录中保存。如下图:
复制之前备用的头文件zconf.h、zlib.h
到include
目录中保存,如下图:
编译Release-64位
创建编译后文件存放的文件夹
配置CMake
- 指定源码目录
- 编译输出目录
- 进入Config
- 选择合适的Visual Studio版本)
- 选择计算机类型
- 结束配置Finish,会提示“Configuring done”
- 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:
VS编译静态库动态库
进入CMake选择的输出文件夹,发现生成了一个VS项目。如下图:
双击zlib.sln
,打开项目,设置为Release-64位。如下图:
右键zlibstatic–》生成以及右键zlib-》生成,如下图:
在xxx\build-64\Debug
中分别生成了静态库和动态库。如下图:
制作库模块
将动态库、静态库和头文件复制出来备用。
建立目录zlib-1.2.11-cmake-release-msvc64
,在其下再建立四个空目录bin、include、lib、share
如下图:
复制生成的zlibd.dll
和对应的导入库zlibd.lib
到share
目录中保存。如下图:
复制生成的静态链接库zlibstaticd.lib
到lib
目录中保存。如下图:
复制之前备用的头文件zconf.h、zlib.h
到include
目录中保存,如下图:
功能测试
见Zlib库使用测试对应的版本。
Zlib库使用测试
创建一个控制台应用测试编译的zlib库是否能够正常使用。
Debug-64位测试
在VS中使用静态库zlibstat.lib
。
创建项目
开始–》找到VS2019–》打开VS2019–》创建新项目。如下图:
点击控制台应用–》下一步。如下图:
配置项目。如下图:
将前面制作的库模块zlib-1.2.11-debug-msvc64
复制到工程文件夹,内含Debug-64位静态库、动态库、头文件。如下图:
切换到刚创建的VS工程点击解决方案资源管理器
中的显示所有文件
,发现zlib-1.2.11-debug-msvc64
已经包含在工程中了。如下图:
设置Debug-64位编译
设置编译模式为Debug-64位。如下图:
添加zlib库文件
添加include头文件,在当前解决方案上右键–》属性–》C/C++–>常规–》附加库目录–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:
添加lib静态库文件,在当前解决方案上右键–》属性–》链接器–>常规–》附加库目录–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:
添加lib静态库文件,在当前解决方案上右键–》属性–》链接器–>输入–》附加依赖项–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:
添加lib静态库文件,在当前解决方案上右键–》属性–》C/C++–>预处理器–》预处理器定义–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:
都设置好后先点击应用–》再点击确定。如下图:
运行测试
编写简单测试代码。
#include <iostream>
#include <stdlib.h>
#include <string>
#include <zlib.h>
#include <zconf.h>
using namespace std;
int main(int argc, char* argv[]) {
unsigned char szSrc[] = "test the compression and uncompression of zlib.";
unsigned long nSrcLen = sizeof(szSrc);
unsigned char szZip[1024] = { 0 };
unsigned long nZipLen = 1024;
compress(szZip, &nZipLen, szSrc, nSrcLen);
unsigned char szUnZip[1024] = { 0 };
unsigned long nUnZipLen = 1024;
uncompress(szUnZip, &nUnZipLen, szZip, nZipLen);
cout << "Src:" << szSrc << ", len:" << nSrcLen << endl;
cout << "Zip:" << szZip << ", len:" << nZipLen << endl;
cout << "UnZip:" << szUnZip << ", len:" << nUnZipLen << endl;
system("pause");
return 0;
}
如下图:
生成–》生成解决方案,编译代码成功。如下图:
调试–》开始执行(不调试)执行代码成功。如下图:
Release-64位测试
仍然使用前面创建的项目,这次使用动态库zlib.lib
,只需要做一点修改。
复制库文件到项目
将前面制作的库模块zlib-1.2.11-release-msvc64
复制到工程文件夹,内含Release-64位静态库、动态库、头文件。如下图:
设置Release-64位编译
设置编译模式为Release-64位。如下图:
添加zlib库文件
添加share动态态库文件,参考上文的方法。
上面的include、share、.lib、ZLIB_WINAPI
添加完成后,还需要将zlib.dll
引导库添加到工程根目录下。如下图:
运行测试
生成–》生成解决方案,编译代码成功。如下图:
调试–》开始执行(不调试)执行代码成功。如下图:
Debug-32位测试
仍然使用前面创建的项目,这次使用静态库zlibstat.lib
,只需要做一点修改。
复制库文件到项目
将前面制作的库模块zlib-1.2.11-cmake-debug-msvc32
复制到工程文件夹,内含Debug-32位静态库、动态库、头文件。如下图:
设置Debug-32位编译
设置编译模式为Debug-32位。如下图:
添加zlib库文件
添加share静态库文件,参考上文的方法。
上面的include、share、.lib
添加完成后,即可编译。ZLIB_WINAPI
预编译不要添加。
运行测试
生成–》生成解决方案,编译代码成功。如下图:
调试–》开始执行(不调试)执行代码成功。如下图:
Release-32位测试
仍然使用前面创建的项目,这次使用动态库zlib.dll
,只需要做一点修改。
复制库文件到项目
将前面制作的库模块zlib-1.2.11-cmake-release-msvc32
复制到工程文件夹,内含Release-32位静态库、动态库、头文件。如下图:
设置Release-32位编译
设置编译模式为Rlease-32位。如下图:
添加zlib库文件
添加share静态库文件,参考上文的方法。
上面的include、share、.lib
添加完成后,还需要将zlibwapi.dll
引导库添加到工程根目录下。ZLIB_WINAPI
预编译不要添加。如下图:
运行测试
生成–》生成解决方案,编译代码成功。如下图:
调试–》开始执行(不调试)执行代码成功。如下图:
编译完成后的库下载
zlib1.2.11cmake+vs2019编译的四种库.rar-C文档类资源-CSDN下载