zlib 是提供资料压缩的函数库,由 Jean-loup Gailly 与 Mark Adler 所开发,初版0.9版在1995年5月1日发表。zlib使用抽象化的 DEFLATE 算法,最初是为 libpng 函数库所写的,后来普遍为许多软件所使用。

Windows 版一般不提供静态编译,本教程主要介绍了在 Windows 如何静态编译 zlib。在开始之前,首先确认你的机器已经安装了 CMake 和 Visual Studio,如果你不知道怎样安装,可以查看 CMake 安装教程Visual Studio 安装教程

首先去官网,下载 zlib 的源码包。

官网截图

最新版本的 zlib 为 1.2.11。下载完成后,解压,找到 CMakeLists.txt 文件,用已经安装好的 CMake 软件打开,或者直接将该文件拖拽到 CMake 的 UI 界面上。在 Where to build the binaries 目录后面增加 _build 目录。这样可以确保生成的文件在 _build 目录中,而不会污染原有的 zlib 目录。

cmake

点击 Configure 按钮,生成配置信息,如果弹出新建 _build 目录确认的对话框,选择 Yes。

cmake

选择你想要编译的平台版本,这里使用 vs2019 编译 x64 位的静态库。

cmake

点击 Finish,CMake 会自动识别当前系统的配置信息,并生成相关的配置文件。

Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.
The C compiler identification is MSVC 19.24.28315.0
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done
Looking for sys/types.h
Looking for sys/types.h - found
Looking for stdint.h
Looking for stdint.h - found
Looking for stddef.h
Looking for stddef.h - found
Check size of off64_t
Check size of off64_t - failed
Looking for fseeko
Looking for fseeko - not found
Looking for unistd.h
Looking for unistd.h - not found
Renaming
    C:/projects/zlib-1.2.11/zconf.h
to 'zconf.h.included' because this file is included with zlib
but CMake generates it automatically in the build directory.
Configuring done

如果界面显示红色,不用担心,再次点击 Configure 按钮即可消失。

这里面因为无需配置其它信息,所以可以直接点击 Generate 生成工程文件。接着点击 OpenProject 按钮打开工程即可。

vs 工程

解决方案中的 zlib 可以编译动态库,zlibstatic 可以编译静态库,这里我们需要静态库,所以直接编译 zlibstatic 工程即可。但是按照 Debug/Release 和 /MT 以及 /MD 之分,至少可以组合四种配置,所以我们分别选择不同的配置属性,生成最后的四种库文件,并将它们放到不同的目录下。具体的配置方法可以查看 运行时库详解 这篇文章,每次修改配置都编译一次工程,编译成功后,将生成的结果放到一开始设定的目录下,最后的目录结构如下:

---
 |--- include //放头文件
 |--- lib
       |--- Debug
       |      |--- MDd
       |      |     |-- zlibstaticd.lib
       |      |
       |      |--- MTd
       |            |-- zlibstaticd.lib
       |
       |--- Release
              |--- MD
              |     |-- zlibstatic.lib
              |
              |--- MT
                    |-- zlibstatic.lib

为了方便这里我打包了最后的结果,方便大家直接使用,不过这里只有 x64 版本,如果你的机器还是 32 位系统则无法使用。zlib 静态库下载

这里有一点注意,在 include 头文件的目录里面需要加入 CMake 生成的 zconf.h 文件,这个文件默认生成在 _build/zconf.h 里面,如果忘记这个头文件,在使用 zlib 库的时候,可能会无法找到 zconf.h 而导致编译无法通过。