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

news2024/12/23 15:16:29

😁博客主页😁:🚀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.coloradmin.cn/o/2264286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题,需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令,用于维护 go.mod 文件…

java: 无效的目标发行版: xx

java: 无效的目标发行版: xx 背景java: 无效的目标发行版: xx 在 Intellij 的修复 背景 这里单独针对Intellij开发工具对 “java: 无效的目标发行版: xx”错误的修复。 java: 无效的目标发行版: xx 在 Intellij 的修复 同一台电脑使用多个JDK的时候容易出现在运行程序时容易…

vscode+编程AI配置、使用说明

文章目录 [toc]1、概述2、github copilot2.1 配置2.2 使用文档2.3 使用说明 3、文心快码(Baidu Comate)3.1 配置3.2 使用文档3.3 使用说明 4、豆包(MarsCode)4.1 配置4.2 使用文档4.3 使用说明 5、通义灵码(TONGYI Lin…

leetcode-80.删除有序数组的重复项II-day12

总结:不必过于死磕一道题目,二十分钟没做出来就可参考题解

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能(AI)项目的开发和部署过程中,环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码,确保每个人使用的环境一致,才能避免 “在我的机器上可以运行”的尴尬问题。…

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…

Keil5 STM32库函数的工程

库函数来间接的操作寄存器 条件编译,如果你定义了USE_STDPERIPH_DRIVER (使用标准外设驱动)这个字符串,stm32f10x_conf.h才有效

Vue2五、自定义指令,全局局部注册、指令的值 ,插槽--默认插槽,具名插槽 ( 作用域插槽)

一、自定义指令 使用步骤 1. 注册 (全局注册 或 局部注册) ,在 inserted 钩子函数中,配置指令dom逻辑 2. 标签上 v-指令名 使用 1、自定义指令(全局) Vue.directive("指令名",{ 指令的配置项 insert…

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台,集成了版本控制、代码审查、问题跟踪、持续集成与持续交付(CI/CD)等多种功能,旨在为团队提供一站式的项目管理解决方案。借助 GitLab,开发…

MySQL基础笔记(三)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助,请多多点赞、评论、收藏,你们的反馈是我更新最大的动力! 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…

使用qemu搭建armv7嵌入式开发环境

目录 目录 1 概述 2 环境准备 2.1 vexpress系列开发板介绍 2.2 安装工具 2.2.1 安装交叉工具链 2.2.2 安装qemu 2.2.3 安装其他工具 3 启动uboot 3.1 uboot下载与编译 3.1.1 下载 3.1.2 编译 3.2 使用qemu启动uboot 4 启动kernel 4.1 下载和编译kernel 4.1.1 下…

数据思维的哲学思考

引言 天地合而万物生,阴阳接而变化起。 《荀子礼论》 数据思维的哲学基础源于唯物主义哲学。在马克思的唯物主义思想中,世界是物质的,物质是运动的,运动是有规律的,规律是客观的。 数据思维的哲学基础就是&#xff…

Dijkstra(迪杰斯特拉)最短路径算法可视化演示

Dijkstra(迪杰斯特拉)算法,是一种解决带权图中单源最短路径的经典算法。它由荷兰计算机科学家 Edsger Dijkstra 于1956年提出。在现实生活中,这个算法被广泛应用于导航系统、网络路由等场景。 比如在地图导航中,城市可以看作图中的节点&…

利用深度纹理实现全局雾效

1、为什么要实现屏幕后处理效果的全局雾效 既然Unity中已经提供了全局雾效,那为什么还要自己来实现呢?主要是因为Unity自带的全局雾效有以下几个缺点: 需要为每个自定义Shader按规则书写雾效处理代码自带的全局雾效无法实现一些自定义效果&…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天,在使用Subversion提交代码到服务器时,发现无法提交*.a、*.so等二进制文件,右击这些文件,发现其属性为ignores。     问题原因:SVN的配置文件里,屏蔽了*.a、*.so文件的上传与下载,并把这些…

Linux下学 〖MySQL 〗表的属性之约束条件(下)(自增长auto_increament、唯一键unique key、外键foreign key)

绪论​ 每日激励:“不是看到希望才坚持,而是坚持了才有希望。—Jack” 绪论​: 本章是约束的下半篇,它将带你认识到一些在字段中非常常用的约束条件,自增长AUTO_CREMENT、唯一键UNIQUE KEY 和 外键FOREIGN KEY这三个。…

观察者模式(sigslot in C++)

大家,我是东风,今天抽点时间整理一下我很久前关注的一个不错的库,可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计,sigslot 官网: http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…

内置函数.

日期函数 current_date/time() 日期/时间 获得年月日: 获得时分秒: 获得时间戳:日期时间 now()函数 体会date(datetime)的用法:只显示日期 在日期的基础上加日期:按照日历自动计算 关键字为 intervalinterval 后的数值…

web实验三

web实验三 三四个小时左右吧&#xff0c;做成功了学到新东西了&#xff0c;还是挺有趣的&#xff0c;好玩。还有些功能没做完&#xff0c;暂时这样了&#xff0c;要交了。 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF…

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…