2012-07-17 142 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)地址周圍的彙編代碼,也可以檢查這些彙編的變量值。如果你有源代碼,你可能有很好的機會去理解它崩潰的原因。

相關問題