【问题标题】:Crash in png_set_read_fn() on Windows 7在 Windows 7 上的 png_set_read_fn() 中崩溃
【发布时间】:2012-07-16 01:00:45
【问题描述】:

我正在为 Windows 7 交叉编译一些 C 代码并链接到找到 here 的 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 是我调用它的函数。

【问题讨论】:

    标签: c windows gdb libpng


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      已解决(不幸的是通过反复试验),但以防万一其他人遇到此问题,这是由 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);
      

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 2021-02-04
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 2015-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多