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

简介

zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发。使用时一般编译为库,根据需求可能有四种组合,即Debug-32位、Debug-64位、Release-32位、Release-64位。

目标

编译出以上四种库并简单测试。

阅读基础

  • 了解VS的使用

快速阅读

了解的部分跳过。

环境说明

  • 操作系统:Windows10-64bit
  • VS版本:VS2019
  • 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位版本。

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博客

zlib

zlib的所有版本官网下载

zlib的所有libpng版本官网下载

zlib1.2.11官网下载

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

在这里插入图片描述

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

BlogImage-20210827110617

下载成功!如下图:

BlogImage-20210827110808

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

BlogImage-20210827111151

准备工作完成。

VS2019综合IDE编译

进入xxx\zlib-1.2.11\contrib\vstudio\vc14目录–》右键zlibvc.sln–》打开方式–》VS2019。如下图:

BlogImage-20210827112135

有6个工程。如下图:

  • miniunz一个解压的测试例子(下面所使用的测试使用用例)生成可执行文件miniunz.exe

  • minizip一个压缩的测试例子

  • testzlibdll使用zlib静态库,并测试压缩/解压效率,生成可执行文件testzlibdll.exe

  • testzlib使用zlib动态库,并测试压缩/解压效率,生成可执行文件testzlib.exe

  • zlibvc生成动态链接库zlibwapi.dll对应的导入库zlibwapi.lib

  • zlibstat生成静态链接库zlibstat.lib

BlogImage-20210827112921

编译Debug-64位

我们选择zlibvc进行编译-》设置编译Debug-64位。如下图:

BlogImage-20210827114848

升级VS平台工具集

点击生成–》解决方案。如下图:

BlogImage-20210827115016

提升无法找到VS2015的平台工具,提示可以通过项目–》重定解决方案目标升级当前Visual Studio工具。如下图:

BlogImage-20210827114612

按照提示可以通过项目–》重定解决方案目标升级当前Visual Studio工具。如下图:

BlogImage-20210827115441

点击确定升级。如下图:

BlogImage-20210827115636

升级成功。如下图:

BlogImage-20210827115830

解决error MSB3073

再次编译,操作参考上文。如下图:

BlogImage-20210827140604

进入项目zlibvc属性设置。如下图:

BlogImage-20210827140837

进入编辑bld_ml64.bat路径界面。如下图:

BlogImage-20210827141048

找到目录中bld_ml64.bat的位置,如下图:

BlogImage-20210827141435

编辑内容。如下图:

BlogImage-20210827141755

再次编译,操作参考上文。如下图:

BlogImage-20210827142007

解决error LNK1118

编译zlib1.2.8时会遇到。

找到zlibvc.def文件。

BlogImage-20210827182429

找到zlibvc.def文件第4行的VERSION语句行,直接删除该行或者在行首加上;号进行注释。

BlogImage-20210827182356

成功生成Debug-64静态库和动态库

xxx\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibDllDebug成功生成动态库文件。如下图:

BlogImage-20210827142334

同样的方法编译zlibstat工程,xxx\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatDebug成功生成静态库文件。如下图:

BlogImage-20210827165534

其他5个工程

同zlibvc一样的操作其他5个库都能够编译成功,生成对应的文件,参考上面的操作。

  • miniunz一个解压的测试例子(下面所使用的测试使用用例)生成可执行文件miniunz.exe

  • minizip一个压缩的测试例子

  • testzlibdll使用zlib静态库,并测试压缩/解压效率,生成可执行文件testzlibdll.exe

  • testzlib使用zlib动态库,并测试压缩/解压效率,生成可执行文件testzlib.exe

  • zlibvc生成动态链接库zlibwapi.dll对应的导入库zlibwapi.lib

  • zlibstat生成静态链接库zlibstat.lib

BlogImage-20210827142552

制作库模块

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

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

BlogImage-20210827145407

复制ZlibDllDebug中的**动态链接库zlibwapi.dll对应的导入库zlibwapi.lib**到share目录中保存。如下图:

BlogImage-20210827145527

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

BlogImage-20210827145752

复制zlib-1.2.11中的头文件zconf.h、zlib.hinclude目录中保存。如下图:

BlogImage-20210827150243

功能测试

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

编译Release-64位

设置Release-64位编译

我们选择zlibvc进行编译-》设置编译Release-64位。如下图:

BlogImage-20210827155031

成功生成Release-64静态库和动态库

其他配置步骤同Debug-64位。

xxx\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibDllRelease成功生成动态库文件。如下图:

BlogImage-20210827155501

同样的方法编译zlibstat工程,xxx\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatRelease成功生成静态库文件。如下图:

BlogImage-20210827165736

制作库模块

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

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

BlogImage-20210828142859

复制ZlibDllRelease中的**动态链接库zlibwapi.dll对应的导入库zlibwapi.lib**到share目录中保存。如下图:

BlogImage-20210827170052

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

BlogImage-20210827170148

复制zlib-1.2.11中的头文件zconf.h、zlib.hinclude目录中保存。如下图:

在这里插入图片描述

编译Debug-32位

设置Debug-32位编译

我们选择zlibvc进行编译-》设置编译Debug-32位。如下图:

BlogImage-20210827162758

解决error LNK2026

编译,操作参考上文。如下图:
在这里插入图片描述

右键项目名–》属性,进入项目zlibvc属性设置(参考上文)然后进行设置。如下图:

BlogImage-20210827163801

再次编译成功。如下图:

在这里插入图片描述

成功生成Debug-32静态库和动态库

xxx\zlib-1.2.11\contrib\vstudio\vc14\x86\ZlibDllDebug成功生成动态库文件。如下图:

BlogImage-20210827165632

同样的方法编译zlibstat工程,xxx\zlib-1.2.11\contrib\vstudio\vc14\x86\ZlibStatDebug成功生成静态库文件。如下图:

BlogImage-20210827170327

制作库模块

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

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

BlogImage-20210828142935

复制ZlibDllDebug中的**动态链接库zlibwapi.dll对应的导入库zlibwapi.lib**到share目录中保存。如下图:

BlogImage-20210827170502

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

BlogImage-20210827170638

复制zlib-1.2.11中的头文件zconf.h、zlib.hinclude目录中保存。如下图:

BlogImage-20210827150243

功能测试

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

编译Release-32位

设置Release-32位编译

我们选择zlibvc进行编译-》设置编译Release-32位。如下图:

BlogImage-20210827170908

成功生成Release-32静态库和动态库

xxx\zlib-1.2.11\contrib\vstudio\vc14\x86\ZlibDllDebug成功生成动态库文件。如下图:

BlogImage-20210827171122

同样的方法编译zlibstat工程,xxx\zlib-1.2.11\contrib\vstudio\vc14\x86\ZlibStatDebug成功生成静态库文件。如下图:

BlogImage-20210827171313

制作库模块

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

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

BlogImage-20210828143020

复制ZlibDllDebug中的**动态链接库zlibstat.lib对应的导入库zlibwapi.lib**到share目录中保存。如下图:

BlogImage-20210827171236

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

BlogImage-20210827171404

复制zlib-1.2.11中的头文件zconf.h、zlib.hinclude目录中保存。如下图:

BlogImage-20210827150243

功能测试

见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-20210827153038

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

在这里插入图片描述

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

BlogImage-20210827153702

添加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-20210827154447

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

BlogImage-20210827154658

Release-64位测试

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

复制库文件到项目

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

BlogImage-20210827160134

设置Release-64位编译

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

BlogImage-20210827160333

添加zlib库文件

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

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

BlogImage-20210827161847

运行测试

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

BlogImage-20210827162105

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

BlogImage-20210827162145

Debug-32位测试

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

复制库文件到项目

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

BlogImage-20210827172311

设置Debug-32位编译

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

BlogImage-20210827172343

添加zlib库文件

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

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

运行测试

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

BlogImage-20210827172434

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

BlogImage-20210827172509

Release-32位测试

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

复制库文件到项目

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

BlogImage-20210827175356

设置Release-32位编译

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

BlogImage-20210827175425

添加zlib库文件

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

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

BlogImage-20210827161847

运行测试

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

BlogImage-20210827175623

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

BlogImage-20210827181129

其他

编译完成后的库下载

zlib1.2.11VS219编译的四种msvc动态库静态库.rar-其它文档类资源-CSDN下载

最近更新

查看本文最近更新请点击

欢迎关注微信公众号

weixingognzhonghaoerweima

猜你喜欢

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