0

我正在交叉编译一些适用于 Windows 7 的 C 代码并链接到此处找到的libpng12.dll。不幸的是,下面的行会导致崩溃(GDB 说分段错误):

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

我不知道从哪里开始调试这个函数——这个函数看起来非常简单,并且与其余代码无关。回溯的顶部如下所示:

#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 是我调用它的函数。

4

2 回答 2

0

请先使用ADplus或windbg等生成core dump,然后查看#0(0xabababab)地址周围的汇编代码,也可以查看这些汇编的变量值。如果你有源代码,你可能会有很好的机会理解它崩溃的逻辑。

于 2012-07-17T06:17:56.733 回答
0

已解决(不幸的是通过反复试验),但以防万一其他人遇到此问题,这是由不正确的 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);
于 2012-07-18T07:29:40.350 回答