我使用 python 和 zlib 压缩缓冲区,并在 C++ 程序中解压缩它。
如果我用 g++ -m32 构建程序,我可以解压缩缓冲区。
如果我使用 g++ -m64 构建它(并使用相同的选项链接),它将返回 -5 (Z_BUF_ERROR)。
我可以修吗?我应该改变缓冲区的大小吗?
我为我的输出缓冲区分配了确切的大小,我应该将它对齐到 64 位还是什么?
谢谢。
最佳答案
我最近遇到了这种问题。我们有一个软件在 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,这个解决方法是可以的。
关于ubuntu - zlib uncompress 在 Ubuntu 10.10 x64 (g++ -m64) 上返回 -5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5033767/