我使用python和zlib来压缩缓冲区,然后在C ++程序中解压缩它。
如果我使用g ++ -m32构建程序,我可以解压缩缓冲区。
如果我使用g ++ -m64构建它(并使用相同的选项链接),则返回-5(Z_BUF_ERROR)。
我可以修理吗?我应该改变缓冲区的大小吗?
我将输出缓冲区分配给精确的大小,我应该将它与64位或其他东西对齐吗?
感谢。
答案 0 :(得分:2)
我最近遇到过这种问题。我们有一个软件在以32位编译时运行正常(即使在64位系统上运行)但在为64位环境编译时从uncompress()返回相同的Z_BUF_ERROR(使用-m64)
仔细检查压缩数据:通过软件从压缩文件中读取然后再次转储到文件中然后进行比较,没有差异。
所以我的结论是问题来自zlib本身。 Ubuntu 10.4存储库似乎只提供zlib版本1.2.3。 zlib主页提供了1.2.5版(带有一些关于更好的可移植性的注释)。
希望它有所帮助。
编辑:我们从使用uncompress()转移到inflate()并解决了64位架构的问题。我们仍然不知道uncompress()是否适用于具有更新(> 1.2.3)版本的zlib的64位系统。但是如果使用zlib-1.2.3 / 64bits,这种解决方法就可以了。
答案 1 :(得分:1)
我遇到了同样的问题。这是因为我将对int的引用作为uncompress的第二个参数(destLen)传递。这导致uncompress函数内部的值不正确,因为扩展到uLong(8字节而不是4字节)。对destLen参数使用uLong变量引用解决了所有问题