1. 程式人生 > >編譯pano13的一些注意事項

編譯pano13的一些注意事項

作者:朱金燦

       pano是一個開源影象拼接庫,pano13就是它的1.3版本。今天編譯這個庫,發現需要注意一個地方。pano是依賴於png庫的。我設定依賴的png庫的版本是1.5.12。在編譯pano13出現下面錯誤:

錯誤285error C2037: “jmpbuf”的左側部分指定未定義的結構/聯合“png_struct_def”e:\src\Test\libpano13-2.9.17\png.c64

錯誤287error C2037: “jmpbuf”的左側部分指定未定義的結構/聯合“png_struct_def”e:\src\Test\libpano13-2.9.17\png.c173

錯誤

286error C2168: “_setjmp”: 內部函式的實參太少e:\src\Test\libpano13-2.9.17\png.c64

錯誤288error C2168: “_setjmp”: 內部函式的實參太少e:\src\Test\libpano13-2.9.17\png.c173

        發現需要在編譯png庫需要設定前處理器:PNG_SETJMP_SUPPORTED,pano13工程中同樣需要設定前處理器:PNG_SETJMP_SUPPORTED

然後在pano13工程需要修改兩處程式碼:

64行的if (setjmp(png_ptr->jmpbuf))改為if(png_jmpbuf(png_ptr)),

174行的if (setjmp(png_ptr->jmpbuf))改為if(png_jmpbuf(png_ptr))。

   原因是png的標頭檔案中有說明:

 This function should be used by libpng applications in place of longjmp(png_ptr->jmpbuf, val).  If longjmp_fn() has been set, it will use it; otherwise it will call PNG_ABORT().  This function was added in libpng-1.5.0.

        還有一個錯誤是編譯png.c時出現png_struct_def結構體無法識別的錯誤,解決辦法是在#include "png.h"下面增加一行程式碼:#include <pnginfo.h>。