2012-07-17 155 views
0

我正在交叉编译Windows 7的一些C代码,并链接到找到的libpng12.dll here。不幸的是,线下会导致系统崩溃(GDB称分段错误):在Windows 7上png_set_read_fn()崩溃

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是我把它从功能。

回答

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); 
0

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