Rust libz_sys 板条箱 - Z_VERSION_ERROR?
Rust libz_sys crate - Z_VERSION_ERROR?
我在 Rust 项目中使用 libz_sys crate,我有以下代码(断章取义):
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))
}
但是当我运行这段代码时,inflateInit_
返回错误代码-6:Z_VERSION_ERROR,这表明zlib.h版本与libz 被链接。有谁知道这是否是这个板条箱的预期错误或如何修复它? libz_sys crate 没有文档,但是我不能使用像 flate2 这样的更高级别的 crate,因为我需要能够将压缩选项传递给 libz。我正在开发 OS X 10.11 和 Rust 1.7-nightly,如果相关的话。
inflateInit_()
的第三个参数是z_stream
结构的大小,而不是数据的长度。
我在 Rust 项目中使用 libz_sys crate,我有以下代码(断章取义):
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))
}
但是当我运行这段代码时,inflateInit_
返回错误代码-6:Z_VERSION_ERROR,这表明zlib.h版本与libz 被链接。有谁知道这是否是这个板条箱的预期错误或如何修复它? libz_sys crate 没有文档,但是我不能使用像 flate2 这样的更高级别的 crate,因为我需要能够将压缩选项传递给 libz。我正在开发 OS X 10.11 和 Rust 1.7-nightly,如果相关的话。
inflateInit_()
的第三个参数是z_stream
结构的大小,而不是数据的长度。