当前位置: 首页 > article >正文

【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰: 2024-12-20 00:13:22

本文未经允许,不得转发!!!

目录

  • 🎄一、minizip 介绍
  • 🎄二、minizip 源码下载
  • 🎄三、minizip 的编译
    • ✨3.1 编译前准备
    • ✨3.2 编译minizip
  • 🎄四、minizip 的交叉编译
  • 🎄五、总结


在这里插入图片描述

在这里插入图片描述

🎄一、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 源码下载

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 的编译

这个小节介绍的是使用 Ubuntu 自带的 gcc 编译器编译过程。

✨3.1 编译前准备

minizip 是依赖 zlib 库的,所以需要先编译 zlib ,关于zlib的编译和交叉编译,可以参考这篇文章:https://blog.csdn.net/wkd_007/article/details/140573322。

完成zlib编译后,其编译结果如下:
在这里插入图片描述


✨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 的交叉编译

交叉编译的步骤跟上个小节一样。本文使用的是 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的编译、交叉编译。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁


http://www.kler.cn/a/443514.html

相关文章:

  • 蓝桥杯JAVA--003
  • 【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】
  • Unity学习笔记(五)什么是状态机
  • 前端编码技巧与规范
  • filebeat采集应用程序日志和多行匹配
  • 获取用户详细信息-ThreadLocal优化
  • 使用CSS把背景图片铺满屏幕
  • Windows Server 2019 配置PHP环境(图文教程)
  • RFdiffusion get_torsions函数解读
  • NGINX的安装和配置(Linux环境)
  • 文心快码代码助手智能体:智能体时代委托自主完成任务
  • 使用ollama编写大模型客户端
  • mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
  • 如何使用 Python 处理数据库事务?
  • spring boot密码加密方式
  • opencascade配置笔记
  • QNX通过pfctl工具查看socket通信状态
  • Serverless集成和扩展性概述
  • POD 存储、PV、PVC
  • 基于wifi的火焰报警系统设计(论文+源码)
  • vue框架的搭建
  • Web工作原理:请求与响应
  • request.setAttribute()和session.setAttribute()的区别
  • 统一运维管理平台:全面管理AWS和阿里云
  • 「MDN web 入门」学习笔记
  • gitlab初始化+API批量操作