zlib1.2.11的动态库静态库Cmake+VS2019编译

简介

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

zlib的所有版本官网下载

zlib的所有libpng版本官网下载

zlib1.2.11官网下载

点击链接zlib1.2.11官网下载进入zlib官网下载,本文编写时最新版时zlib1.2.11。如下图:

BlogImage-20210827110206

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

BlogImage-20210827110617

下载成功!如下图:

BlogImage-20210827110808

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

BlogImage-20210827111151

准备工作完成。

CMake+MSVC编译

准备工作

打开CMake

在开始菜单找到CMake,点击CMake(cmake-gui)打开CMake。如下图:

BlogImage-20210831111326

打开CMake后。如下图:

BlogImage-20210831111420

保存zlib.h和zconfig.h

编译之前就复制一份出来备用,使用cmake编译后zconfig.h编译后会被改为zconf.h.included,zlib.h编译后会被改为zlib.h.included

BlogImage-20210831145304

编译Debug-32位

创建编译后文件存放的文件夹

BlogImage-20210831115151

配置CMake

  1. 指定源码目录
  2. 编译输出目录
  3. 进入Config
    1. 选择合适的Visual Studio版本)
    2. 选择计算机类型
    3. 结束配置Finish,会提示“Configuring done”
  4. 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:

BlogImage-20210831141553

VS编译静态库动态库

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

BlogImage-20210831142120

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

BlogImage-20210831142359

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

BlogImage-20210831142907

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

BlogImage-20210831143418

制作库模块

将动态库、静态库和头文件复制出来备用。

建立目录zlib-1.2.11-cmake-debug-msvc32,在其下再建立四个空目录bin、include、lib、share如下图:

BlogImage-20210831143854

复制生成的zlibd.dll和对应的导入库zlibd.libshare目录中保存。如下图:

BlogImage-20210831144203

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

BlogImage-20210831144551

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

BlogImage-20210831145304

编译Release-32位

创建编译后文件存放的文件夹

BlogImage-20210831115151

配置CMake

  1. 指定源码目录
  2. 编译输出目录
  3. 进入Config
    1. 选择合适的Visual Studio版本)
    2. 选择计算机类型
    3. 结束配置Finish,会提示“Configuring done”
  4. 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:

BlogImage-20210831141553

VS编译静态库动态库

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

BlogImage-20210831142120

双击zlib.sln,打开项目,设置为Release-32位。如下图:

BlogImage-20210831145610

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

BlogImage-20210831145943

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

BlogImage-20210831150206

制作库模块

将动态库、静态库和头文件复制出来备用。

建立目录zlib-1.2.11-cmake-release-msvc32,在其下再建立四个空目录bin、include、lib、share如下图:

BlogImage-20210831143854

复制生成的zlibd.dll和对应的导入库zlibd.libshare目录中保存。如下图:

BlogImage-20210831150602

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

BlogImage-20210831150647

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

BlogImage-20210831145304

功能测试

见Zlib库使用测试对应的版本。

编译Debug-64位

创建编译后文件存放的文件夹

BlogImage-20210831153423

配置CMake

  1. 指定源码目录
  2. 编译输出目录
  3. 进入Config
    1. 选择合适的Visual Studio版本)
    2. 选择计算机类型
    3. 结束配置Finish,会提示“Configuring done”
  4. 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:

BlogImage-20210831151239

VS编译静态库动态库

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

BlogImage-20210831151507

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

BlogImage-20210831151607

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

BlogImage-20210831151905

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

BlogImage-20210831152157

制作库模块

将动态库、静态库和头文件复制出来备用。

建立目录zlib-1.2.11-cmake-debug-msvc64,在其下再建立四个空目录bin、include、lib、share如下图:

BlogImage-20210831143854

复制生成的zlibd.dll和对应的导入库zlibd.libshare目录中保存。如下图:

BlogImage-20210831144203

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

BlogImage-20210831144551

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

BlogImage-20210831145304

编译Release-64位

创建编译后文件存放的文件夹

BlogImage-20210831153423

配置CMake

  1. 指定源码目录
  2. 编译输出目录
  3. 进入Config
    1. 选择合适的Visual Studio版本)
    2. 选择计算机类型
    3. 结束配置Finish,会提示“Configuring done”
  4. 单击Generate生成Visual Studio的*.sln项目文件。会提示“Generating done”。如下图:

BlogImage-20210831151239

VS编译静态库动态库

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

BlogImage-20210831151507

双击zlib.sln,打开项目,设置为Release-64位。如下图:

BlogImage-20210831152555

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

BlogImage-20210831152716

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

BlogImage-20210831152830

制作库模块

将动态库、静态库和头文件复制出来备用。

建立目录zlib-1.2.11-cmake-release-msvc64,在其下再建立四个空目录bin、include、lib、share如下图:

BlogImage-20210831143854

复制生成的zlibd.dll和对应的导入库zlibd.libshare目录中保存。如下图:

BlogImage-20210831150602

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

BlogImage-20210831150647

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

BlogImage-20210831145304

功能测试

见Zlib库使用测试对应的版本。

Zlib库使用测试

创建一个控制台应用测试编译的zlib库是否能够正常使用。

Debug-64位测试

在VS中使用静态库zlibstat.lib

创建项目

开始–》找到VS2019–》打开VS2019–》创建新项目。如下图:

BlogImage-20210827150850

点击控制台应用–》下一步。如下图:

BlogImage-20210827151120

配置项目。如下图:

BlogImage-20210827151312

将前面制作的库模块zlib-1.2.11-debug-msvc64复制到工程文件夹,内含Debug-64位静态库、动态库、头文件。如下图:

BlogImage-20210827151641

切换到刚创建的VS工程点击解决方案资源管理器中的显示所有文件,发现zlib-1.2.11-debug-msvc64已经包含在工程中了。如下图:

BlogImage-20210827151744

设置Debug-64位编译

设置编译模式为Debug-64位。如下图:

BlogImage-20210827152300

添加zlib库文件

添加include头文件,在当前解决方案上右键–》属性–》C/C++–>常规–》附加库目录–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:

BlogImage-20210831161034

添加lib静态库文件,在当前解决方案上右键–》属性–》链接器–>常规–》附加库目录–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:

BlogImage-20210831161400

添加lib静态库文件,在当前解决方案上右键–》属性–》链接器–>输入–》附加依赖项–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:

BlogImage-20210831161608

添加lib静态库文件,在当前解决方案上右键–》属性–》C/C++–>预处理器–》预处理器定义–》添加路径,添加各种信息(都不用带分号,直接添加)。如下图:

BlogImage-20210827153853

都设置好后先点击应用–》再点击确定。如下图:

BlogImage-20210827154045

运行测试

编写简单测试代码。

#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;
}

如下图:

BlogImage-20210827154228

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

BlogImage-20210827154447

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

BlogImage-20210827154658

Release-64位测试

仍然使用前面创建的项目,这次使用动态库zlib.lib,只需要做一点修改。

复制库文件到项目

将前面制作的库模块zlib-1.2.11-release-msvc64复制到工程文件夹,内含Release-64位静态库、动态库、头文件。如下图:

BlogImage-20210831162608

设置Release-64位编译

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

BlogImage-20210827160333

添加zlib库文件

添加share动态态库文件,参考上文的方法。

上面的include、share、.lib、ZLIB_WINAPI添加完成后,还需要将zlib.dll引导库添加到工程根目录下。如下图:

BlogImage-20210831162737

运行测试

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

BlogImage-20210827162105

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

BlogImage-20210827162145

Debug-32位测试

仍然使用前面创建的项目,这次使用静态库zlibstat.lib,只需要做一点修改。

复制库文件到项目

将前面制作的库模块zlib-1.2.11-cmake-debug-msvc32复制到工程文件夹,内含Debug-32位静态库、动态库、头文件。如下图:

BlogImage-20210831163824

设置Debug-32位编译

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

BlogImage-20210827172343

添加zlib库文件

添加share静态库文件,参考上文的方法。

上面的include、share、.lib添加完成后,即可编译。ZLIB_WINAPI预编译不要添加。

运行测试

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

BlogImage-20210827172434

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

BlogImage-20210827172509

Release-32位测试

仍然使用前面创建的项目,这次使用动态库zlib.dll,只需要做一点修改。

复制库文件到项目

将前面制作的库模块zlib-1.2.11-cmake-release-msvc32复制到工程文件夹,内含Release-32位静态库、动态库、头文件。如下图:

BlogImage-20210831164402

设置Release-32位编译

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

BlogImage-20210827175425

添加zlib库文件

添加share静态库文件,参考上文的方法。

上面的include、share、.lib添加完成后,还需要将zlibwapi.dll引导库添加到工程根目录下。ZLIB_WINAPI预编译不要添加。如下图:

BlogImage-20210831164535

运行测试

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

BlogImage-20210827175623

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

BlogImage-20210827181129

编译完成后的库下载

zlib1.2.11cmake+vs2019编译的四种库.rar-C文档类资源-CSDN下载

最近更新

查看本文最近更新请点击

欢迎关注微信公众号

weixingognzhonghaoerweima

猜你喜欢

转载自blog.csdn.net/aa1319594154/article/details/120022263