zlib1.2.11的动态库静态库Cmake+VS2019编译
文章目录
-
简介
-
- 目标
- 阅读基础
- 快速阅读
- 环境说明
-
相关软件介绍
-
- VS
- CMake
- zlib
-
软件下载安装配置
-
- VS2019
- CMake
- zlib
-
CMake+MSVC编译
-
- 准备工作
-
- 打开CMake
- 保存zlib.h和zconfig.h
-
进行32位调试版本的编译过程
-
- 生成用于存储最终编译产物的文件夹目录
- 配置CMake工具以生成项目所需的源代码构建指令
- 使用Visual Studio对静态和动态库进行编译
- 制定并执行完整的库模块构建计划
-
进行 Release-32 位版本的发布候选
-
建立专用存放目录用于存放编译完成后产生的所有项目相关文件
-
配置 CMake 工具链设置
-
通过 VS 开发环境进行编译并构建相应的静态和动态库模块
-
对构建完成的静态和动态库模块进行功能测试
-
进行调试64位版本的编译工作
-
- 生成用于存放已编译文件的目录结构
- 配置CMake以设置构建参数
- 在Visual Studio中构建静态和动态链接库
- 构建作为独立软件模块的二进制库
-
对项目进行64位版本的构建
-
为编译后的文件创建存储目录
- 配置Build Configuration
- 使用VS开发环境分别构建静态和动态链接库
- 构建Library Module并完成相关配置参数设置
- 在Visual Studio中执行项目调试以确保代码正确性
- 执行功能测试并验证系统稳定性
-
对Zlib库的使用情况进行测试
-
针对64位环境的调试测试
- 建立项目
- 配置针对64位系统的编译设置
- 导入所需Zlib库文件
- 执行相关测试用例
- 建立项目
-
64位版本发布测试工作
-
将相关库文件拷贝至项目目录中
- 配置项目以支持64位编译环境
- 导入zlib库资源文件至项目中
- 执行相关测试用例
-
进行32位架构调试
-
- 将相关库源文件复制至项目目录中
- 配置开发环境为32位架构进行编译设置
- 引入zlib库的头文件和对象代码
- 执行相应的测试用例
-
Release-32位测试
-
将源代码文件复制至项目目录中进行操作
-
配置编译选项以支持32位版本的开发需求
-
安装包含zlib库的头文件资源
-
执行单元测试以验证功能完整性
- 编译完成后的库下载
-
最近更新
-
欢迎关注微信公众号
-
简介
zlib专为数据压缩提供函数库设计用于这一领域。负责开发者是Jean-loup Gailly和Mark Adler。通常会将其构建为静态库以便在项目中直接使用。根据不同的需求设置方式有四种组合方案供选择。
目标
编译出以上四种库并简单测试。
阅读基础
- 了解CMake的使用。
- 了解VS的使用。
快速阅读
了解的部分跳过。
环境说明
- 操作系统:Windows10-64bit
- VS版本:VS2019
- CMake版本:3.21.0-rc1
- zlib版本:zlib1.2.11
相关软件介绍
VS
Microsoft Visual Studio(简称VS)是美国微软公司开发的一款集成开发环境(IDE)系列产品。VS作为一个核心完整的开发工具集,在软件生命周期中提供了几乎所有的必要功能模块,并包含多种专业工具包以满足不同需求:如UML建模工具、代码管理工具以及专业的集成开发环境等。所编写的适用于微软所有官方支持操作系统平台的目标代码包括但不限于微软Windows操作系统及其衍生产品线:从传统的Windows操作系统的Windows 7/8/10系列到移动设备端运行的Windows Mobile设备系统;以及面向嵌入式设备运行的Windows CE操作系统;同时还涵盖了基于.NET技术体系架构的应用程序开发框架——.NET Framework和其轻量化版本——.NET Compact Framework;此外还包括针对移动互联网设备设计的专业跨平台编程框架——Silverlight技术和基于微软WAS技术打造的移动智能设备开发平台——Windows Phone操作系统等
Visual Studio 是主流 Windows 平台应用程序使用的集成开发环境,并提供丰富的功能支持与良好的用户体验保障。其最新版本采用 Visual Studio 2019 系列架构,并基于 .NET Framework 4.8 开发而成。
微软于4月19日发布了Visual Studio 2022的第一个预览版本(预计将于夏末推出)。
根据微软公司的官方消息,在2021年6月17日正式发布了Visual Studio 2022的第一个preview版本,并且首次推出了64位版本。
CMake
CMake是一种跨平台的自动化构建工具。该软件通过一个名为CMakeLists.txt的标准文件来定义构建流程。特别地,在Windows环境中时会创建相应的Visual Studio工程文件夹结构。此外,在支持Linux的操作系统上运行时会自动生成对应的Makefile配置文件。
在熟悉某个集成开发环境(IDE)后,在依一般化的构建方式操作。从而使得具备该类集成开发环境知识的开发者能够采用标准化的构建流程来构建他们的软件系统。其独特的优势在于能够利用各平台自带的原生构建系统能力,并且与其它类似工具相比的主要区别在于...
zlib
目前,在业界中zlib被视为一种事实上的标准。因此,在标准文档中,zlib和DEFLATE常被相互替代使用。成千上万的应用程序直接或间接依赖于zlib的压缩函数库,并列列举了以下内容:包括:广泛使用的压缩工具如bzip2、xz以及zip格式的实现等。
- 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开发环境搭建
CMake
1
1
zlib
请访问网站[网站名称]进行详细信息查阅,在本次编写过程中所使用的版本号为v0.x.x。如需进一步了解,请参考下图所示的内容

找到下载链接–》点击下载。提供了三种压缩包,根据需求下载。如下图:

下载成功!如下图:

新建一个文件夹zlib1211并在其中解压zlib1.2.11。如下图:

准备工作完成。
CMake+MSVC编译
准备工作
打开CMake
在开始菜单找到CMake,点击CMake(cmake-gui)打开CMake。如下图:

打开CMake后。如下图:

保存zlib.h和zconfig.h
在编译项目之前,请确保有一个备份文件以防万一。为了便于后续操作,请先准备一份拷贝。使用CMake进行配置和生成相应的头文件路径时,请注意以下修改:将Z_CONFIG_H包含头文件修改为ZCONF_H.INCLUDED,并将ZLIB.H包含头文件修改为ZLIB.H.INCLUDED。
在编译项目之前,请确保有一个备份文件以防万一。为了便于后续操作,请先准备一份拷贝。使用CMake进行配置和生成相应的头文件路径时,请注意以下修改:将Z_CONFIG_H包含头文件修改为ZCONF_H.INCLUDED,并将ZLIB.H包含头文件修改为ZLIB.H.INCLUDED。

编译Debug-32位
创建编译后文件存放的文件夹

配置CMake
- 指定源代码目录
- 编译的目标目录
- 进入配置文件管理器
- 选择合适的Visual Studio版本
- 指定计算机类型
- 结束配置时会提示'Configuring done'。
点击Generate按钮以创建Visual Studio工程的.sln文件。系统会在完成后弹出提示信息'生成完成'。如图所示。

VS编译静态库动态库
进入CMake选择的输出文件夹,发现生成了一个VS项目。如下图:

双击zlib.sln,打开项目。如下图:

右键zlibstatic–》生成以及右键zlib-》生成,如下图:

在xxx\build-32\Debug中分别生成了静态库和动态库。如下图:

制作库模块
将动态库、静态库和头文件复制出来备用。
创建主目录名为 zlib-1.2.11-cmake-debug-msvc32 ,在其下新增四个空 directories 分别命名为 bin、include、lib 和 share

将生成的zlibd.dll及其对应的导入文件zlibd.lib放置于指定的共享目录中进行存放,并在相关位置标注如图所示

复制生成的静态链接库zlibstaticd.lib到lib目录中保存。如下图:

复制之前备用的头文件zconf.h、zlib.h到include目录中保存,如下图:

编译Release-32位
创建编译后文件存放的文件夹

配置CMake
-
指定源码文件夹的位置
-
确定编译的目标位置
-
进入配置管理器
- 选择相应的开发环境版本)
- 指定计算机类型)
- 点击完成配置操作后会提示‘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
-
指定源码所在的位置
-
确定编译的目标路径
-
进入系统配置选项
1. 设置对应的Visual Studio版本号
2. 配置计算机类型设置
3. 完成配置后会提示'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后,在其内部进一步创建四个空的子directory结构分别命名为'bin'、'include'、'lib'和'share$。

将生成的zlibd.dll$和对应的导入库zlibd.lib放置于share目录中以备后续使用。如图所示。

复制生成的静态链接库zlibstaticd.lib到lib目录中保存。如下图:

复制之前备用的头文件zconf.h、zlib.h到include目录中保存,如下图:

编译Release-64位
创建编译后文件存放的文件夹

配置CMake
- 指定源码文件夹位置
- 确定编译结果存放路径
- 进入系统参数设置界面
- 选择Visual Studio版本号
- 设置目标系统类型
- 完成配置操作后会显示"配置完成"提示信息
通过单击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如图所示:

请将生成的.dll$...$中的.lib...组件及其相关配套导入库通过命令行工具或脚本批量拷贝至共享目录中,并进行存储管理以避免数据泄露风险。

复制生成的静态链接库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库文件
在项目开发中包含必要的头文件是非常重要的一步。通过右键点击解决方案上的属性菜单,在C/C++编程选项卡下选择附加库目录并进行配置,在常规设置中找到附加库目录项进行详细配置参数的编辑和设置。然后依次添加各种所需的信息(无需使用分号即可直接输入),完成所有必要的配置操作即可完成附加库的正确配置

导入lib静态库文件,在当前解决方案上执行右键操作→属性→连接器→常规选项卡→附加目录位置→指定路径位置,并直接输入相关信息(无需使用分号)。参考下图。

在当前项目中,在属性窗口中选择右键操作符并导航至链接器选项卡。进入该界面后,在附加依赖项窗口中选择所需动态连接库(DLL),并在输入字段中新增所需信息(无需使用分号分隔)。如图所示:

请在当前解决方案中进行以下操作:首先右键属性→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动态态库文件,参考上文的方法。
在配置完成后,则需将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,只需要做一点修改。
复制库文件到项目
将该CMakeLists.txt复制至工程文件夹中,并包含32位静态库、动态链接库以及相关的头文件[如附图所示]。

设置Release-32位编译
设置编译模式为Rlease-32位。如下图:

添加zlib库文件
添加share静态库文件,参考上文的方法。
在完成上述操作后(即完成了对include、share、.lib文件的配置),还需要将位于工程根目录下的zlibwapi.dll引导库进行附加配置(即将其附加至工程根目录位置)。同时不需要对ZLIB_WINAPI进行预编译设置(如图所示:)。

运行测试
生成–》生成解决方案,编译代码成功。如下图:

调试–》开始执行(不调试)执行代码成功。如下图:

编译完成后的库下载
[zlib 1.2.11 cmake + VS 2019 编译的四种库
最近更新
欢迎关注微信公众号

