ubuntu - zlib uncompress 在 Ubuntu 10.10 x64 (g++ -m64) 上返回 -5

标签 ubuntu g++ 64-bit zlib

我使用 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/

相关文章:

c++ - GCC constexpr 允许添加,但不允许使用地址进行按位或

c - Windows过滤器驱动上的32位_asm代码到64位汇编代码

dll - 如何在 Windows 7 64 位上注册 DLL 文件?

c++ - 使用存档 (.a) 编译程序时遇到问题

mysql - Ubuntu 上的 Mariadb 我为 CURRENT_USER 使用的用户是 root@% 而不是 root@localhost

linux - Eclipse Neon "Customize perspective"引发 "StackOverflowError"

mysql - Docker 在 Ubuntu 16.04 上安装 MySQL v3.23

c++ - dlsym()'ing C++ 中的全局变量

python - 我的程序可以访问超过 4GB 的内存吗?

c++ - 如何在不在命令行 g++ 中运行 .so 文件的情况下使用它