在Windows 7上的png_set_read_fn()中崩溃

我交叉编译Windows 7的一些C代码,并链接到这里find的libpng12.dll。 不幸的是,下面这行会导致崩溃(GDB表示分段错误):

png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 

我不知道从哪里开始debugging – 该函数看起来非常简单,与代码的其余部分无关。 回溯的顶部看起来像这样:

 #0 0xabababab in ?? () #1 0x6cc556d1 in png_set_read_fn () from c:\...libpng12.dll #2 0x6cc7a5d4 in png_libpng_ver () from c:\...libpng12.dll #3 0x00000038 in ?? () #4 0x0028f928 in ?? () 

我猜#4是png_create_read_struct(),因为#5是我调用它的函数。

请先使用ADplus或windbg等产生核心转储,然后查看#0(0xabababab)地址周围的汇编代码,也可以查看这些汇编的变量值。 如果你有源代码,你可能有一个很好的机会来理解为什么它崩溃的逻辑。

解决(不幸的是,通过试验和错误),但以防万一谁遇到这个问题,这是由zlib(在我的情况下,太旧)的版本不正确。 你可以在运行时很容易地检查这个:

 fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n", PNG_LIBPNG_VER_STRING, png_libpng_ver); fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n", ZLIB_VERSION, zlib_version);