欢迎来到天天文库
浏览记录
ID:28516751
大小:73.67 KB
页数:7页
时间:2018-12-11
《常用数据压缩库的编译与使用.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、常用数据压缩库的编译与使用由于在工作中有用到数据压缩的功能,我便查找了一些压缩函数库,对这些函数库进行了简单的实验,简要对比了各自的性能。在这里,我既是对以前工作的总结,也同时希望能给其他人带来一些帮助。首先,因为我工作中使用的环境是嵌入式Linux系统,采用的是C语言,因此我在选择压缩函数库的时候主要是选择一些能交叉编译的函数库。我前后共实验了三种函数库,分别是:LZO、ZILB和LZMA。分别在Windows平台和嵌入式Linux平台实验。由于我对压缩算法并没有深入的了解,实验的结果也不能确保一定正确,仅仅为作为一个参考。1.数据压
2、缩库简介1.1LZO库简介LZO库在描述自己的时候使用的是“实时数据压缩库”(areal-timedatacompressionlibrary),这就意味着LZO库是更加重视数据压缩的速度。该项目的主页是http://www.oberhumer.com/opensource/lzo/,LZO遵循GNU的GPL使用许可。LZO库最初采用ANSIC编写,是一个无损压缩库。它提供多个压缩函数接口,要得到高的压缩率,就会降低压缩速度,然而,解高压缩率的数据并没有明显速度。详细的说明可以参考其工程目录下的doc/LZO.TXT文件,这里简单列出该
3、压缩库的一些特点:1、解压速度非常快,解压不需要额外的内存空间。2、压缩速度也非常快,压缩只需要64k的内存。3、提供函数接口用来牺牲速度来换取高压缩率,但解压速度不降低。4、有仅仅需要8k内存的压缩算法。5、算法是线程安全的无损压缩算法。1.2ZLIB库简介ZLIB库是一个通用的数据压缩库,它几乎已经成为了一个业界的标准,在许多软件中得到应用。该项目的主页是http://www.zlib.net/,ZLIB是自由软件,使用ZLIB授权。ZLIB数据压缩库同样是一个无损压缩库,对线程也是安全的。它提供数据压缩接口,同时也提供了gzip文
4、件的读写接口。函数库提供了对处理器和内存使用控制的能力,可以在诸如嵌入式系统这样内存有限制的环境中是有用的。详细的说明可以参考其工程目录下doc目录中的文档。1.2LZMA库简介LZMA是一个Deflate和LZ77算法改良和优化后的压缩算法库,具有很高的压缩比。2001年被首次应用于7-Zip压缩工具中,是2001年以来得到发展的一个数据压缩算法。项目主页为http://www.7-zip.org/sdk.html,LZMA是公开的压缩库。LZMA库具有高的压缩比和较快的速度,解压代码和占用的内存都比较小。其压缩所需要的内存是:字典大
5、小*11.5+6M+状态大小。解压需要的内存是:字典大小+状态大小。详细的说明可以参考其工程目录下doc目录中的文档。2数据压缩库的编译方法由于我要测试Windows平台和嵌入式Linux平台下的运行情况,因此这里只是列举这两个平台的编译方法。编译的目标是静态库,这里列举的方法可能不是最简单的编译方法,如果你有更加方便或规范的编译方法请与我联系。2.1LZO库的编译我使用的LZO库的版本是2.09a)Windows平台编译在LZO工程文件中目录B/win32和B/win64目录中有编译的批处理文件,可是我在实际使用的过程中不能正确执行,
6、不知道是不是哪里出了问题,我使用的方法是新建立一个VS工程,包含工程目录下的src和include目录生成静态库文件,最终编译出了LZO的Windows静态库。b)交叉编译LZO的交叉编译时非常简单的,只要进入LZO的目录,依次输入一下命令就可以完成LZO的交叉编译。1、设置编译器:exportCC=你的编译器。2、设置AR程序:exportAR=你的AR程序。3、设置安装目录./configure--host=arm-linux--prefix=$PWD/amr_install/4、执行make命令。1、执行makeinstall命令
7、。在这些命令都执行完成之后,LZO的静态库和头文件就会放在工程目录的amr_install文件夹中。在执行makeinstall可能会出现错误,我在执行过程中就出现了chmod无法更改权限的错误,可能是因为我使用虚拟机编译的原因,不过无所谓,自己复制一下就好啦。2.2ZLIB库的编译我使用的ZLIB库版本是1.2.8a)Windows平台下编译ZLIB的Windows下编译很简单,在ZLIB的工程目录下contrib/vstudio/目录中有vc9、vc10、vc11三个文件夹。分别对应不同的VS版本,我安装的是VS2013可以打开vc
8、11。其中的zlibstat工程是用来编译静态库的,只需选中工程点击生成即可。另外,在ZLIB静态库使用的过程中可能会出现函数找不到实现这样的情况,出现这个问题的原因很可能是__stdcall调用和__cd
此文档下载收益归作者所有