pngfix.c:2151:未定义引用`inflateReset2'

som*_*rti 3 png matplotlib libpng

我的平台:

Centos 6.X,Matplotlib-1.3.1,Numpy-1.8.0,Scipy 0.14.0.dev-bb608ba

我正在尝试安装libpng-1.6.6来显示.png文件但是在尝试make它时未能给出以下错误.

注意:我已成功预安装zlib(以及freetype2),这应该是错误所指向的.

pngfix.o: In function `zlib_reset':
/usr/lib/hue/libpng-1.6.6/contrib/tools/pngfix.c:2151: undefined reference to `inflateReset2'
collect2: ld returned 1 exit status
make[1]: *** [pngfix] Error 1
make[1]: Leaving directory `/usr/lib/hue/libpng-1.6.6'
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

请参阅我的原始线程matplotlib-pyplot-does-not-show-output-no-error的链接

我检查了2151行的pngfix.c.它是zlib_reset函数,与rc设置有关.是否指向更改一些matplotlibrc设置?

   2136 zlib_reset(struct zlib *zlib, int window_bits)
   2137    /* Reinitializes a zlib with a different window_bits */
   2138 {
   2139    assert(zlib->state >= 0); /* initialized by zlib_init */
   2140
   2141    zlib->z.next_in = Z_NULL;
   2142    zlib->z.avail_in = 0;
   2143    zlib->z.next_out = Z_NULL;
   2144    zlib->z.avail_out = 0;
   2145
   2146    zlib->window_bits = window_bits;
   2147    zlib->compressed_digits = 0;
   2148    zlib->uncompressed_digits = 0;
   2149
   2150    zlib->state = 0; /* initialized, once */
   2151    zlib->rc = inflateReset2(&zlib->z, 0);
   2152    if (zlib->rc != Z_OK)
   2153    {
   2154       zlib_message(zlib, 1/*unexpected*/);
   2155       return 0;
   2156    }
   2157
   2158    return 1;
   2159 }
Run Code Online (Sandbox Code Playgroud)

som*_*rti 5

解决了libpng安装的问题.

失败的原因显然是版本不兼容,部分原因可能是由于libpng-1.6.6不稳定并且与之前安装的zlib-1.2.8存在冲突.

我卸载了zlib-1.2.8并重新安装了较旧但稳定的版本zlib-1.2.7而不是libpng-1.6.6,下载并安装了libpng-1.5.9并且libpng安装成功通过了测试!

这次没有zlib_reset - 'inflateReset2'问题.不知道是否有更好的解决方案,但无论如何我似乎绕过了问题.所以理想的兼容版本是zlib-1.2.7/libpng-1.5.9,而不是我一直在尝试的zlib-1.2.8/libpng-1.6.6!希望这可以帮助.

  • 降级到libpng-1.5.9解决inflateReset2问题的原因是libpng-1.5.9不提供pngfix. (2认同)

小智 5

我遇到了同样的问题(“未定义引用'inflateReset2'”),并尝试将libpng-1.6.6和libpng-1.6.13与zlib-1.2.8和zlib-1.2.7结合使用。没事!

然后我遇到了这个有用的文章:https : //stackoverflow.com/a/21345713

发生的是libpng使用libtools进行编译和链接,而libtools默认情况下仅在/ usr / lib和/ usr / include中查找库和头文件。因此,如果您已在本地目录中手动安装了更高版本的zlib,则libtools在尝试构建libpng时找不到它,并且该错误是由于对更高版本的zlib的要求libpng导致的。

解决方案是简单地运行./configure,将LDFLAGS和CPPFLAGS设置为lib并包含安装了更高版本的zlib的目录。就我而言:

LDFLAGS=-L$HOME/.local/lib CPPFLAGS=-I$HOME/.local/include ./configure --prefix=$HOME/.local
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!