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

news/2024/12/23 21:14:50 标签: 开源, linux, minizip, minizip交叉编译, minizip编译

😁博客主页😁:🚀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的编译、交叉编译。

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


http://www.niftyadmin.cn/n/5797010.html

相关文章

【RK3588 Linux 5.x 内核编程】-内核中断与ThreadedIRQ

内核中断与ThreadedIRQ 文章目录 内核中断与ThreadedIRQ1、Threaded IRQ介绍2、Threaded IRQ相关API3、驱动实现4、驱动验证当 Interrupt 触发时,Interrupt handler 应该执行得非常快,它不应该运行更多的时间(它不应该执行耗时的任务)。 如果我们有执行更多任务的中断处理程…

MyBatis实现自定义MyBatis插件详解

MyBatis实现自定义MyBatis插件详解 初识插件拦截对象拦截实现加载流程xml配置插件XMLConfigBuilder加载插件创建插件对象 例子确定拦截对象实现拦截接口配置插件测试 MyBatis的一个重要的特点就是插件机制,使得MyBatis的具备较强的扩展性,我们可以根据My…

JavaIO 在 Android 中的应用

主要是学习如何设计这样的 IO 系统,学习思想而不是代码本身。 1、装饰模式在 IO 中的应用 IO 嵌套其实使用到了装饰模式。装饰模式在 Android 中有大量的使用实例,比如 Context 体系: 可以看到 Context 还是基本上遵循了标准装饰模式的结构…

windows C#-编写复制构造函数

C # 记录为对象提供复制构造函数,但对于类,你必须自行编写。 编写适用于类层次结构中所有派生类型的复制构造函数可能很困难。 如果类不是 sealed,则强烈建议考虑创建 record class 类型的层次结构,以使用编译器合成的复制构造函…

【C语言之】二进制的四种位运算:取反、与、或、异或

【C语言之】二进制的四种位运算:取反、与、或、异或 1、按位取反运算( bit not : ~ ) 对操作数的每一位执行逻辑取反操作,即将每一位的 0 变为 1,1 变为 0。取反运算符,按二进制位进行"取反"运…

数据结构---------二叉树前序遍历中序遍历后序遍历

以下是用C语言实现二叉树的前序遍历、中序遍历和后序遍历的代码示例&#xff0c;包括递归和非递归&#xff08;借助栈实现&#xff09;两种方式&#xff1a; 1. 二叉树节点结构体定义 #include <stdio.h> #include <stdlib.h>// 二叉树节点结构体 typedef struct…

Linux网络功能 - 服务和客户端程序CS架构和简单web服务示例

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述准备工作扫描服务端有那些开放端口创建客户端-服务器设置启动服务器和客户端进程双向发送数据保持服务器进程处于活动状态设置最小…

【优选算法---分治】快速排序三路划分(颜色分类、快速排序、数组第K大的元素、数组中最小的K个元素)

一、颜色分类 题目链接: 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 题目介绍&#xff1a; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序…