编译 Lua 的 zlib 库——lua-zlib

最近需要使用 Lua 给 Wireshark 写个插件(dissector),苦于基于 C 的文档实在是太少了,干脆就用 Lua 来写。但是 Lua 也真是够“轻量”的,官方都没有个支持 zlib 压缩/解压的库。最后终于找到了 lua-zlib (URL:https://github.com/brimworks/lua-zlib),可以支持实时的流(Stream)压缩/解压。


编译 lua-zlib 还需要下面两个依赖:zlibCMake。先从 zlib 的网站上下载到 1.2.6 的源代码,使用 CMake 编译。然后就可以开始编译 lua-zlib 了。

1. 使用 CMake-GUI 打开 lua-zlib 源代码目录(目录存在有 CMakeLists.txt),选择相应的编译器。



2. 点 Configure 后,会提示一些错误。按提示修改好 Lua 的路径。


3. 然后点 Generate,就会在 Build 目录中生成 VS2010 的解决方案 lua-zlib.sln。

4. 打开 sln 文件。在 cmod_zlib 工程中打开 配置属性 - 链接器 - 输入 - 附加依赖项 中加入 lua51.lib 的完整路径。

5. 最后就可以直接生成 Release 版的 lua-zlib 库了。最终会生成一个 zlib.dll(lua-zlib 库),需要依赖 zlib1.dll(原始的 zlib 库,Wireshark 带有)。


使用方法:

首先要将 zlib.dll 复制到 Wireshark 的安装目录(原本的目的就是给 Wireshark 写插件的)。然后在 lua 代码中引用 zlib:

require 'zlib'

在解压数据之前,生成一个函数:

uncompress = zlib.inflate()

然后就可以使用 uncompress 来解压数据:

local inflated, eof, bytes_in, bytes_out = uncompress(compressed_string)

参数 compressed_string 是压缩的数据, 返回的 inflated 是解压后的数据,bytes_in 是压缩数据的长度,bytes_out 是解压后数据的长度。

使用 VS2010 编译好的库(含有zlib.dll、msvcr100.dll、zlib1.dll):下载

猜你喜欢

转载自blog.csdn.net/kowity/article/details/7229815