TA的每日心情 | 擦汗 22 分钟前 |
---|
签到天数: 163 天 连续签到: 11 天 [LV.7]常住居民III
|
本帖最后由 stm1024 于 2023-12-20 22:32 编辑
最近出差了一个多星期,有点耽搁了开发板的测试,刚回来,趁着有空继续开发板的评测工作,这次测试移植在很多软件中都广泛使用中的zlib。
0. zlib介绍
zlib是一种事实上的业界标准,以至于在标准文档中,zlib和DEFLATE常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库,例如Linux内核,libpng、FFmpeg,OpenSSH等等。它被设计为一个免费的、通用的、不受法律约束的、即不受任何专利保护的无损数据压缩库,可在几乎任何计算机硬件和操作系统上使用,因为其代码的可移植性,宽松的许可以及较小的内存占用,zlib在许多嵌入式设备中也有应用,zlib 数据格式本身可以跨苹台移植。
zlib 中使用的压缩算法与 gzip 和 Zip 中的压缩算法基本相同,即源自 PKWARE 的 PKZIP 2.x 的 “deflate” 方法,例如使用十六进制编辑软件打开一个zip文件,最开始的两个字节一定是PK(50 4B),关于PKWARE及ZIP文件格式也有一个历史故事,详见这里。
1. 交叉编译
和前面其他软件包的交叉编译类似,但是细节有点儿不同,这里给出过程。
首先获取软件安装包,官方链接在这里:ZLIB
然后在Ubuntu虚拟机中解压,需要创建一个专用的文件夹,存放编译过程中产生的中间文件,创建build文件夹,并创建一个build.sh的脚本文件:
在文件中编辑内容:
注意,这里我的环境变量已经将编译环境的路径export了,如果没有,需要添加根据自身交叉编译器的软件环境,添加相应的环境变量:
最后是为脚本赋予执行权限。
接下来就是运行脚本文件:
中间需要输入一个sudo make install所需要的密码:
然后可以在之前build.sh的指定路径下看到生成的文件:
通过file查看文件的属性:
可见确实是生成到目标开发板的库文件了。
2. 部署类库将上图中文件夹下的头文件、库文件放入开发板的环境路径中,一般是将库文件libz.a,libz.so.1.3都放在/lib/下,并为其赋予0755的权限,在/usr/lib下为libz.so.1.3创建软连接libz.so,头文件zconf.h,zlib.h放入/usr/include/路径下。
3. 测试代码
- #include <stdio.h>
- #include "zlib.h"
- int main()
- {
- char strSrc[] = "aaaaaaabbbbbbbbbbbbbbbcccccccccccc";
- char buf[1024] = {0}, strDst[1024] = {0};
- long srcLen, bufLen, dstLen;
- srcLen = sizeof(strSrc);
- bufLen = sizeof(buf);
- dstLen = sizeof(strDst);
- printf("zlib Version:\t%s\n", zlibVersion());
- printf("Original String Length=%ld\n", srcLen);
- //compress
- printf("Compressing...\n");
- bufLen = compressBound(srcLen);
- //compress(buf, &bufLen, strSrc, srcLen);
- compress2(buf,&bufLen,strSrc, srcLen,9);
- printf("Compressed Length:%ld\n", bufLen);
- printf("Compressed String:%s\n", buf);
- //Uncompressing
- printf("Uncompressing...\n");
- uncompress(strDst, &dstLen, buf, bufLen);
- printf("Uncompressed Length:%ld\n", dstLen);
- printf("Uncompressed String:%s\n", strDst);
- return 0;
- }
复制代码 虚拟机中编译如下:
上传,修改权限,运行效果如下:
OK,今天的测试就到这里。
|
-
|