😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰: 2024-12-20 00:13:22
本文未经允许,不得转发!!!
minizip__14">🎄一、minizip 介绍
minizip
最初是由吉勒·沃兰特(Gilles Vollant)1998年开发的。从zlib 1.1.2开始,它作为一个额外的代码贡献首次包含在zlib发行版中。从那时起,它一直在不断改进,并得到了许多人的贡献。原文项目仍然可以在由Mark Adler维护的zlib发行版中找到。
minizip 是一个基于 zlib 库开发的用于文件压缩和解压缩的开源库。它提供了一系列功能强大且易于使用的接口,能够处理常见的压缩文件格式,如 ZIP。minizip 在跨平台性方面表现出色,支持多种操作系统,包括 Windows、Linux、Mac OS 等,这使得它在众多不同环境的软件开发项目中得到广泛应用。无论是在小型的桌面应用程序中,还是大型的服务器端软件中,只要涉及到文件压缩和解压缩操作,minizip 都可能是一个合适的选择。
minizip 的官网地址:http://www.winimage.com/zLibDll/minizip.html
本文使用的编译环境:
- 编译系统:
Ubuntu 18.04.6 LTS
- 编译器:
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
- 交叉编译工具:aarch64-mix210-linux-gcc(海思SS528平台)
minizip__30">🎄二、minizip 源码下载
minizip现在有两个版本:
- 一个是跟随着
zlib
库一起发布的,存放在zlib库的zlib-1.3.1/contrib/minizip/
,现在zlib的最新版本是1.3.1版本 ,可以从这个地址下载到其发布版:https://github.com/madler/zlib/tags
minizip的在zlib库的源码地址:https://github.com/madler/zlib/tree/master/contrib/minizip - 另一个版本的地址是:https://github.com/zlib-ng/minizip-ng。这个库背后的动机是需要新的特性和对原始库的错误修复,而原始库已经很长时间没有维护了。为了帮助提高可维护性和可读性,代码在很大程度上进行了重构和重写。已经为原始minizip库的消费者提供了兼容层。
这两个库的区别:zlib中的minizip代码是minizip的原始库,比较长的时间没更新了。而minizip-ng是对原始代码进行了重构和重写的,可以更好地阅读,也有更好地兼容性。
使用哪个,读者自己斟酌,本文是使用 zlib
中的 minizip
,这个对于我的情况来说已然够用,以后不兼容再看minizip-ng
。
代码如下:
minizip__47">🎄三、minizip 的编译
这个小节介绍的是使用 Ubuntu 自带的 gcc 编译器编译过程。
✨3.1 编译前准备
minizip 是依赖 zlib 库的,所以需要先编译 zlib ,关于zlib的编译和交叉编译,可以参考这篇文章:https://blog.csdn.net/wkd_007/article/details/140573322。
完成zlib编译后,其编译结果如下:
minizip_58">✨3.2 编译minizip
- ①复制一份 minizip 源码到 zlib 编译结果同级目录,
cp zlib-1.3.1/contrib/minizip/ ./ -far
- ②进入minizip目录
cd minizip
- ③修改 Makefile 如下:
ZLIB_PATH := ../result_gcc CC?=cc AR?=ar CFLAGS := $(CFLAGS) -O -I $(ZLIB_PATH)/include -shared -fPIC MINIZIP_SO_OBJS = unzip.o zip.o ioapi.o $(ZLIB_PATH)/lib/libz.so MINIZIP_A_OBJS = unzip.o zip.o ioapi.o $(ZLIB_PATH)/lib/libz.a .c.o: $(CC) -c $(CFLAGS) $*.c all: libminizip.a libminizip.so libminizip.so: $(MINIZIP_SO_OBJS) $(CC) $(CFLAGS) -o $@ $(MINIZIP_SO_OBJS) libminizip.a: $(MINIZIP_A_OBJS) $(AR) rcs $@ $(MINIZIP_A_OBJS) clean: rm -f *.o *.a *.so
- ④执行 make
make
编译后 minizip 目录下会出现 libminizip.a、libminizip.so
,编译完成。
minizip__100">🎄四、minizip 的交叉编译
交叉编译的步骤跟上个小节一样。本文使用的是 aarch64-mix210-linux-gcc
,读者根据需求替换成自己的交叉编译器即可。
首先,也是 zlib 的交叉编译,没做这一步的同学,参考:https://blog.csdn.net/wkd_007/article/details/140573322。
然后,也是复制一份 minizip 源码出来,修改 Makefile 如上个小节那样;
最后,执行下面 make 命令:
make CC=aarch64-mix210-linux-gcc AR=aarch64-mix210-linux-ar ZLIB_PATH=../result_mix210
🎄五、总结
本文介绍了minizip,以及在 Linux(Ubuntu18.04)下,minizip的编译、交叉编译。
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁