Windows下MinGW GCC 8.1.0环境Zlib 1.2.11安装配置及使用示例求助
Windows GCC 8.1.0 环境下 zlib 1.2.11 编译配置指南
前置准备
- 将下载得到的zlib 1.2.11源码压缩包解压到纯英文、无空格、无特殊字符的路径下,例如
D:\libs\zlib-1.2.11,路径带中文或空格大概率会触发编译时的路径识别错误。 - 打开MinGW对应的命令行终端,执行
gcc -v确认返回版本为8.1.0,保证gcc、make等编译工具已加入系统环境变量,可直接调用。
编译操作
- 在终端中进入源码目录下的
win32子文件夹,该目录已经预置了适配GCC的编译配置文件Makefile.gcc。 - 直接执行编译命令:
make -f Makefile.gcc - 等待编译完成后,当前
win32目录下会生成以下核心文件:
- 头文件:
zlib.h、zconf.h - 静态库:
libz.a - 动态库:
zlib1.dll
- 可以手动将上述文件归类到你常用的库存放目录,比如:
- 头文件放到自定义include目录,例如
D:\libs\include - 库文件放到自定义lib目录,例如
D:\libs\lib - 动态库如果需要调用,后续放到编译生成的exe同目录即可,也可以加入系统Path路径。
如果不想手动拷贝文件,可以先打开Makefile.gcc修改prefix字段为你想要的安装路径(注意路径用正斜杠,例如prefix = D:/libs/zlib),再执行make -f Makefile.gcc install,脚本会自动把对应文件归类到prefix指定目录的include、lib子文件夹下。
项目编译参数配置
写代码引入zlib头文件后,编译自己的项目时需要加三个类别的参数:
- 用
-I参数指定头文件所在目录,例如头文件在D:\libs\include就加-ID:/libs/include - 用
-L参数指定库文件所在目录,例如库文件在D:\libs\lib就加-LD:/libs/lib - 加链接参数
-lz,告知GCC需要链接zlib库
举个实际编译例子,假设你的测试代码文件名为test.c,完整编译命令为:gcc test.c -ID:/libs/include -LD:/libs/lib -lz -o test.exe
如果-L指定的路径下只有libz.a静态库,编译出的exe可以独立运行,不需要依赖zlib1.dll。
入门测试示例
用下面的代码可以快速验证环境是否配置正确,功能是实现简单的字符串压缩和解压:
#include <stdio.h> #include <string.h> #include <zlib.h> int main() { const char* raw_str = "zlib test content: this is a long string used to verify compression and decompression function."; uLong raw_len = strlen(raw_str); printf("原始数据长度:%lu\n原始内容:%s\n\n", raw_len, raw_str); // 压缩逻辑 uLong comp_len = compressBound(raw_len); Bytef comp_buf[1024] = {0}; int res = compress(comp_buf, &comp_len, (const Bytef*)raw_str, raw_len); if (res != Z_OK) { printf("压缩失败,错误码:%d\n", res); return 1; } printf("压缩后数据长度:%lu\n\n", comp_len); // 解压逻辑 Bytef decomp_buf[1024] = {0}; uLong decomp_len = sizeof(decomp_buf); res = uncompress(decomp_buf, &decomp_len, comp_buf, comp_len); if (res != Z_OK) { printf("解压失败,错误码:%d\n", res); return 1; } printf("解压后数据长度:%lu\n解压内容:%s\n", decomp_len, decomp_buf); return 0; }
编译运行后如果能正常输出原始内容、压缩后长度、解压后内容,就说明zlib环境配置完全正常。
常见问题
- 编译时报
cannot find -lz:先检查libz.a是否放在-L参数指定的目录下,库文件名有没有被手动修改,路径是否用了正斜杠。 - 运行exe时报缺少
zlib1.dll:如果需要用动态库就把dll放到exe同目录,如果不想依赖dll就确认链接的是libz.a静态库,不要把dll和静态库放在同一个-L路径下,避免gcc优先链接动态库。 - 编译过程中报路径相关错误:检查zlib源码路径、库存放路径是否有中文、空格或者特殊字符,换成纯英文路径再重新编译。
内容的提问来源于stack exchange,提问作者Cozer
相关产品推荐
相关产品推荐

