查看: 1476|回复: 0

[评测分享] 【更适合初学者的开发板ELF 1】15-zlib的移植及测试

[复制链接]
  • TA的每日心情
    擦汗
    22 分钟前
  • 签到天数: 163 天

    连续签到: 11 天

    [LV.7]常住居民III

    发表于 2023-12-20 15:40:18 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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文件格式也有一个历史故事,详见这里

    2023-12-20_150927.png

    1. 交叉编译
    和前面其他软件包的交叉编译类似,但是细节有点儿不同,这里给出过程。
    首先获取软件安装包,官方链接在这里:ZLIB
    然后在Ubuntu虚拟机中解压,需要创建一个专用的文件夹,存放编译过程中产生的中间文件,创建build文件夹,并创建一个build.sh的脚本文件:
    1.png
    在文件中编辑内容:
    2.png

    注意,这里我的环境变量已经将编译环境的路径export了,如果没有,需要添加根据自身交叉编译器的软件环境,添加相应的环境变量:
    2.5.png

    最后是为脚本赋予执行权限。
    3.png

    接下来就是运行脚本文件:
    5.png
    中间需要输入一个sudo make install所需要的密码:
    6.png
    然后可以在之前build.sh的指定路径下看到生成的文件:
    7.png
    通过file查看文件的属性:
    8.png
    可见确实是生成到目标开发板的库文件了。
    2. 部署类库将上图中文件夹下的头文件、库文件放入开发板的环境路径中,一般是将库文件libz.a,libz.so.1.3都放在/lib/下,并为其赋予0755的权限,在/usr/lib下为libz.so.1.3创建软连接libz.so,头文件zconf.h,zlib.h放入/usr/include/路径下。

    3. 测试代码
    1. #include <stdio.h>
    2. #include "zlib.h"

    3. int main()
    4. {
    5.     char strSrc[] = "aaaaaaabbbbbbbbbbbbbbbcccccccccccc";
    6.     char buf[1024] = {0}, strDst[1024] = {0};
    7.     long srcLen, bufLen, dstLen;
    8.     srcLen = sizeof(strSrc);
    9.     bufLen = sizeof(buf);
    10.     dstLen = sizeof(strDst);

    11.     printf("zlib Version:\t%s\n", zlibVersion());
    12.     printf("Original String Length=%ld\n", srcLen);
    13.     //compress
    14.     printf("Compressing...\n");
    15.     bufLen = compressBound(srcLen);

    16.     //compress(buf, &bufLen, strSrc, srcLen);
    17.     compress2(buf,&bufLen,strSrc, srcLen,9);
    18.     printf("Compressed Length:%ld\n", bufLen);
    19.     printf("Compressed String:%s\n", buf);
    20.     //Uncompressing
    21.     printf("Uncompressing...\n");
    22.     uncompress(strDst, &dstLen, buf, bufLen);
    23.     printf("Uncompressed Length:%ld\n", dstLen);
    24.     printf("Uncompressed String:%s\n", strDst);
    25.     return 0;
    26. }
    复制代码
    虚拟机中编译如下:
    100.png
    上传,修改权限,运行效果如下:
    200.png


    OK,今天的测试就到这里。




    10.png
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 21:39 , Processed in 0.120219 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.