交叉编译 zlib
概述
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。
也可以直接使用 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 环境变量,让系统能够正确搜索到。同时在配置 CC,CXX,CPP 环境变量时指定 --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