zoukankan      html  css  js  c++  java
  • 使用 LZMA SDK

    • 首先是MinGW调用VC编译出的DLL

          LZMA SDK 4.65默认是VC项目,懒得再写makefile了,就直接用VS2008编译吧!还好,压缩/解压核心代码是C的,为保证DLL最大兼容性,选用__cdecl,按C代码编译。得到DLL后,需要使用MinGW中自带的dlltool工具将其转为.a文件:

    dlltool -U -D LZMA.DLL -d LZMA.def -l LZMA.a

          转换过程,def文件是必须有的(从SDK中可以找到,找不到拿工具转),得到的.a文件很小,只有3K左右。然后使用“-L库文件路径”、“-l库文件名(不带.a)”作为参数来编译项目。注意,此路径下不可有与.a文件同名的.lib文件(记得编译DLL时生成的一个.lib文件吧?赶紧删了!),否则,会得到“undefined reference to…”的链接错误。

    • 使用压缩函数LzmaCompress

          本以为压缩函数的输出缓冲区与输入缓冲区相等就可以了,如果你压缩时该函数返回7(SZ_ERROR_OUTPUT_EOF)就说明压缩后的数据大于原数据。为了避免该错误出现,有两种选择:

    1、出现该返回值时,说明压缩后的文件将大于压缩前的文件,可以考虑放弃使用压缩。

    2、使得输出缓冲区大小至少为1.1×原数据大小 + 16K(使用LZMA算法,默认参数)/为1.001×原数据大小 + 32(使用LZMA2算法,该算法自动检测数据是否可压缩)

    • LzmaCompress的输出结果

          该函数的输出结果并不写文件头,我们可以使用props缓冲区的5bytes和*destLen的8bytes一起作为文件头。

    引用文献

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/codingmylife/p/1800947.html
Copyright © 2011-2022 走看看