編譯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
錯誤
錯誤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)),
原因是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>。