代码之家  ›  专栏  ›  技术社区  ›  NeuroXc

生锈libz_sys板条箱-Z_VERSION_ERROR?

  •  1
  • NeuroXc  · 技术社区  · 9 年前

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

    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板条箱没有文档,但是我不能使用像flat2这样的更高级别板条箱,因为我需要向libz传递压缩选项的能力。如果相关的话,我正在OSX10.11和Rust1.7上开发。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Mark Adler    9 年前

    第三个论点 inflateInit_() z_stream 结构,而不是数据的长度。