无法初始化 zlib deflate Z_VERSION_ERROR

cannot initialize zlib deflate Z_VERSION_ERROR

当我尝试初始化 zlib 流以压缩一些数据时,我得到 Z_VERSION_ERROR 返回。手册说 Z_VERSION_ERROR 返回 "if the zlib library version is incompatible with the version assumed by the caller"。我不知道如何解决这个问题,我的系统上似乎只有一个版本的 zlib。

示例代码

#include "zlib.h"

...

printf("VERSION %s\n", ZLIB_VERSION);

int rc = 0;
z_stream strm;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
rc = deflateInit(&strm, -1);

if(rc != Z_OK){
    printf("Error %d\n", rc);
    return;
}

returns

VERSION 1.2.8
Error -6

示例程序 zpipe.c 有注释提到 Z_VERSION_ERROR 返回 "if the version of zlib.h and the version of the library linked do not match",所以我检查了 linked 版本和 zlib.h 文件,他们都说 1.2.8.

ldd

ldd output
libz.so.1 => /usr/lib/libz.so.1 (0x00007fe9b4c5c000)
...

libz.so.1 是一个符号 link

file /usr/lib/libz.so.1
/usr/lib/libz.so.1: symbolic link to libz.so.1.2.8

zlib.h

cat /usr/include/zlib.h |grep ZLIB_VERSION
#define ZLIB_VERSION "1.2.8"

如果使用 zlib.h 中的描述在 C 程序中创建的 z_stream 结构的大小与编译的 z_stream 结构的大小不匹配,也会发生这种情况 libz.so.1.

是否有不止一种方法可以在您的机器上编译程序来更改任何数据类型(例如整数或指针)的大小?

我通过将旧的链接框架和库条目 libz.dylib 替换为更新的 libz.tbd.

在 OSX (Xcode 10) 上解决了这个问题