交叉编译 zlib

news2024/9/30 5:28:40

交叉编译 zlib

概述

logo

zlib 被设计为一个免费的、通用的、不受法律约束的、即不受任何专利保护的无损数据压缩库,可在几乎任何计算机硬件和操作系统上使用。zlib 数据格式本身可以跨平台移植。与Unix 压缩和 GIF 图像格式中使用的 LZW 压缩方法不同,zlib 中当前使用的压缩方法基本上不会扩展数据。(在极端情况下,LZW 可以将文件大小增加两倍或三倍。)zlib 的内存占用量也与输入数据无关,如果需要,可以在压缩时降低一些成本。

zlib 由 Jean-loup Gailly(压缩)和 Mark Adler(解压缩)编写。Jean-loup 也是 gzip 的主要作者,comp.compress FAQ 列表的作者,Info-ZIP 的 ZIP 的前任维护者;Mark 也是 gzip 和 UnZip 主要解压例程的作者,也是 Zip 的原作者。毫不奇怪,zlib 中使用的压缩算法与 gzip 和 Zip 中的压缩算法基本相同,即源自 PKWARE 的 PKZIP 2.x 的 “deflate” 方法。

deflate 和 zlib 规范都在 1996 年 5 月获得了正式的 Internet RFC 地位,而 zlib 本身也被 Java Development Kit(JDK)1.1 版采用,既作为原始类,也作为 JAR 归档格式的一个组件。

今天,zlib是一种事实上的业界标准,以至于在标准文档中,zlib和DEFLATE常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库。

  • 官方网址:https://zlib.net

下载

如果以商用量产为目的,一般选择正式的发行版本为佳。在官方网址 https://zlib.net 页面下方会显示最新可下载的源码压缩包。也可以在 https://zlib.net/fossils 位置找到 zlib 的过往发行版本。根据需求选择合适的版本进行下载,以最新的 1.2.13 版本为例,在主页下方点击链接下载源码包 zlib-1.2.13.tar.gz。

zlib release version
也可以直接使用 wget 命令下载:

wget https://zlib.net/zlib-1.2.13.tar.gz

交叉编译

解压缩源码包:

tar -xvf zlib-1.2.13.tar.gz

解压缩源码包之后建议先阅读 README 文档,里面有关于编译的相关信息。

让我们创建一个环境配置文件 environment-setup,配置最重要的交叉编译环境变量:

export SDK_ROOT=/opt/aarch64--glibc--stable-2020.08-1
export SDKTARGETSYSROOT=$SDK_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$SDK_ROOT/bin:$PATH

export CC="aarch64-linux-gcc --sysroot=$SDKTARGETSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$SDKTARGETSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$SDKTARGETSYSROOT"
export LD="aarch64-linux-ld --sysroot=$SDKTARGETSYSROOT"
export STRIP=aarch64-linux-strip
export RANLIB=aarch64-linux-ranlib
export AR=aarch64-linux-ar
export AS=aarch64-linux-as

在本示例中,交叉编译工具位于 /opt/aarch64--glibc--stable-2020.08-1/bin 目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CCCXXCPP 环境变量时指定 --sysroot=<dir> 参数让交叉编译器搜索 dir 目录下的头文件与库文件。

cd zlib-1.2.13
source environment-setup
./configure --prefix=/usr
make
make DESTDIR=/tmp/sysroot install
  • 源码包解压后,使用 cd 命令切换到源码路径
  • 在源码目录下创建环境设置文件并调用 source 命令让环境变量生效
  • 执行源码包的 configure 文件,带上 --prefix 参数,指定安装路径
  • 执行 make 命令编译源码
  • 使用 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,更详细介绍可以参考 DESTDIR 官方介绍,也可以参考我的上一篇博文《交叉编译 libcap》关于 DESTDIR 的用法说明。

在这里插入图片描述

最终你就可以在 /tmp/sysroot 文件夹中找到交叉编译好的 zlib 的头文件及库文件。Good luck.

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


△ \triangle 交叉编译 libcap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353332.html

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

相关文章

RocketMq使用规范(纯技术和实战建议)

概述&#xff1a; 使用规范主要从&#xff0c;生产、可靠性、和消费为轴线定义使用规范&#xff1b;kafka使用核心&#xff1a;削峰、解耦、向下游并行广播通知&#xff08;无可靠性保证&#xff09;和分布式事务&#xff0c;本规范仅从削峰、解耦、向下游并行广播通知论述&am…

OceanBase 4.0解读:兼顾高效与透明,我们对DDL的设计与思考

关于作者 谢振江&#xff0c;OceanBase 高级技术专家。 2015年加入 OceanBase, 从事存储引擎相关工作&#xff0c;目前在存储-索引与 DDL 组&#xff0c;负责索引&#xff0c;DDL 和 IO 资源调度相关工作。 回顾关系型数据库大规模应用以来的发展&#xff0c;从单机到分布式无…

什么是BOM?与焊盘不匹配,怎么办?

什么是BOM&#xff1f; 简单的理解就是&#xff1a;电子元器件的清单&#xff0c;一个产品由很多零部件组成&#xff0c;包括&#xff1a;电路板、电容、电阻、二三极管、晶振、电感、驱动芯片、单片机、电源芯片、升压降压芯片、LDO芯片、存储芯片、连接器座子、插针、排母、…

成为IT服务台经理需要什么技能

要给员工带来愉快的体验&#xff0c;就必须对你的服务台进行有效的管理。为此&#xff0c;了解为什么服务台经理的角色对于绘制企业组织良好的服务台至关重要。在本指南中&#xff0c;我们将深入探讨他们的角色、能力和贡献&#xff0c;以了解如何顺利处理服务台操作。 IT 服务…

【面试题】前端 移动端自适应?

移动端 h5 开发中有一个绕不开的话题&#xff1a;移动端自适应方案。移动端的设备尺寸不尽相同&#xff0c;要把 UI 设计图较好地展示在移动端上&#xff0c;需要让 h5 页面能自适应设备尺寸。接下来将对移动端自适应的相关概念、方案和其他一些常见问题做个介绍。概念简介大厂…

什么是 Web3?解读未来的去中心化网络:The Decentralized Internet of the Future Explained

目录 互联网的演化 什么是 Web 1.0? 什么是 Web 2.0? Web 2.0 变现与安全性 什么是 Web 3.0? 原生支付 创立公司的新方式 Web3 中的身份 如果你读到这篇文章,那么你已经是当代互联网世界的一员了。我们现在使用的网络和10年前大不相同。所以,互联网是怎么演化的,…

Centos7 安装 Mysql 8.0.32,详细完整教程(好文章!!)

mysql5.7的安装方式参考之前的文章&#xff1a; centos7 安装 Mysql 5.7.27&#xff0c;详细完整教程&#xff08;好文章&#xff01;&#xff01;&#xff09;_HD243608836的博客-CSDN博客 一、检查mysql版本冲突 先检查是否已经存在mysql&#xff0c;若存在卸载&#xff0…

大数据第一轮复习笔记(2)

Spark ./spark-submit --class com.kgc.myspark01.WordCount --master yarn --deploy-mode cluster /opt/myspark01-1.0-SNAPSHOT.jar 1.Client向YARN的ResourceManager申请启动Application Master。Client中创建SparkContext同时初始化中将创建DAGScheduler和TASKScheduler…

固态继电器的五大优势

固态继电器的优点和五个关键优势&#xff0c;现代电气控制系统因二极管、晶体管和晶闸管等固态器件的发明而得到极大的增强。对于加热器和电机等大负载设备&#xff0c;固态继电器可能比传统的机械继电器具有巨大的优势。 虽然并非适用于所有情况&#xff0c;但它们具有许多吸引…

前端——周总结系列五

JS的Map对象 概述 ES6新增的一种数据结构Map&#xff0c;对操作键值对很友好&#xff0c;键值对集合&#xff0c;提供属性和方法供开发者使用。存有键值对&#xff0c;键可以是任何数据类型&#xff1b;按照原始插入顺序存储&#xff08;FIFO&#xff09;原则&#xff1b;具有…

关于ChatGPT,我们到底在担心什么?

“ChatGPT已对教育产生了巨大冲击” “ChatGPT对程序员造成了哪些影响” “ChatGPT会取代人类的哪些工作&#xff1f;” “谷歌宣布推出类ChatGPT产品Bard” “Bing新版本引入ChatGPT” …… 显然&#xff0c;在这段时间内&#xff0c;ChatGPT这个词已经触发了“全民焦虑”。 …

低代码平台调研

一、什么是低代码 首先&#xff0c;我们来看一下低代码的概念。在维基百科上&#xff0c;低代码是这样定义的&#xff0c;它的全称叫做低代码开发平台&#xff0c;它为开发者提供了一种创建应用软件的开发环境&#xff0c;可以通过图形化界面和参数配置的方式来代替传统的纯手…

协方差以及PCA

概念&#xff1a;协方差&#xff08;Covariance&#xff09;在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况&#xff0c;即当两个变量是相同的情况。协方差就是衡量两个变量相关性的变量。当协方差为正时&#xff0c;两个变量呈正相关关系&#…

我用vue开发了一个动态网站--百宝阁 万字长文(spa电商,首页没有做动态,搜索页是动态)

一、前言 学习前端已有大半年了&#xff0c;虽然其中备考软件设计师考试花了两个月&#xff0c;但我还是收获颇丰&#xff0c;从最开始的html,到css&#xff0c;js,在到es6&#xff0c;promise&#xff0c;ajax,node.js、vue、webpack我已经有较为靠谱的编码习惯&#xff0c;亲…

Vue实战第4章:主页设计之中部内容设计

前言 本篇在讲什么 接上篇文章&#xff0c;我们制作了一个自定义的网页导航栏&#xff0c;本篇文章我们简单制作一个内容页 仅介绍简单的应用&#xff0c;仅供参考 本篇适合什么 适合初学Vue的小白 适合想要自己搭建网站的新手 适合没有接触过vue-router的前端程序 本篇…

Vue常用指令及声明周期

文章目录知识点前端开发环境配置v-text && v-htmlv-if、v-else && v-showv-forv-onv-modelv-bind、v-cloak、v-pre&&v-once全局 API 是什么Vue.directive 自定义组件Vue.directive 是什么自定义组件回调函数参数自定义组件的生命周期Vue.set 全局操作为…

【Kafka】一.认识Kafka

kafka是一个分布式消息队列。由 Scala 开发的高性能跨语言分布式消息队列&#xff0c;单机吞吐量可以到达 10w 级&#xff0c;消息延迟在 ms 级。具有高性能、持久化、多副本备份、横向扩展能力。 生产者往队列里写消息&#xff0c;消费者从队列里取消息进行业务逻辑。 一般在…

Unity对接接口丨简单教学丨UnityWebRequest

新手制作接口对接前言使用过程Postman测试第一次测试第二次测试第三次测试第四次测试第五次测试第六次测试总结前言 提示&#xff1a;大体介绍今日功能介绍 介绍大概UnityWebRequest对接接口方式,博主也是作为刚开始对接口的使用&#xff0c;相当详细。 使用过程 这里为内容…

你知道IP属地是怎么来的?

在互联网高速发展的时代&#xff0c;登录网络使用网络的过程当中&#xff0c;会存在非常独特的IP属地&#xff0c;这个独特的概念就是在互联网不断发展过程当中&#xff0c;对于大家来说非常熟悉而又陌生的一个必要设备&#xff0c;在使用各种电子设备上网的时候&#xff0c;都…

Flutter For Web实践

1 什么是Flutter Flutter是Google开源的一套UI工具包&#xff0c;帮助开发者通过一套代码库高效构建多平台精美应用&#xff0c;支持移动APP、web、桌面和嵌入式平台。Flutter和其他的跨平台解决方案的实现方式上有比较大的差异。 我们以React Native&#xff08;下文简称RN&…