Rust libz_系统板条箱-Z_版本错误?

Rust libz_系统板条箱-Z_版本错误?,rust,zlib,Rust,Zlib,我在一个Rust项目中使用libz_sys板条箱,我有以下代码(断章取义): 但是,当我运行此代码时,inflateInit_uu返回错误代码-6:Z_VERSION_error,这表明zlib.h版本与链接的libz版本不匹配。有人知道这是否是这个板条箱的预期错误,或者如何修复它吗?libz_sys板条箱没有文档,但是我不能使用更高级别的板条箱,比如flate2,因为我需要能够将压缩选项传递给libz。我正在开发OS X 10.11和Rust 1.7-nightly,如果相关的话。第三个参数是

我在一个Rust项目中使用libz_sys板条箱,我有以下代码(断章取义):


但是,当我运行此代码时,
inflateInit_uu
返回错误代码-6:Z_VERSION_error,这表明zlib.h版本与链接的libz版本不匹配。有人知道这是否是这个板条箱的预期错误,或者如何修复它吗?libz_sys板条箱没有文档,但是我不能使用更高级别的板条箱,比如flate2,因为我需要能够将压缩选项传递给libz。我正在开发OS X 10.11和Rust 1.7-nightly,如果相关的话。

第三个参数是
inflateInit\(
z\u流的大小,而不是数据的长度。

谢谢,这才是问题所在!我从未从“版本错误”中猜到这一点。它检查版本字符串和z_流结构的大小,以验证头和库是否匹配。
let mut in_data = data.to_owned();
let mut next_out = Vec::with_capacity(in_data.len());
let msg = CString::new("").unwrap();
let mut state = mem::uninitialized();
let mut zstream = libz_sys::z_stream {
    next_in: in_data.as_mut_ptr(),
    avail_in: 0,
    total_in: 0,
    next_out: next_out.as_mut_ptr(),
    avail_out: 0,
    total_out: 0,
    msg: msg.into_raw(),
    state: &mut state,
    zalloc: mem::uninitialized(),
    zfree: mem::uninitialized(),
    opaque: mem::uninitialized(),
    data_type: 0,
    adler: 0,
    reserved: 0,
};
match libz_sys::inflateInit_(&mut zstream, libz_sys::zlibVersion(), data.len() as raw::c_int) {
    libz_sys::Z_OK => (),
    e => return Err(format!("Error decoding idat: Error code {}", e))
}