libpng 是一套免費的、公開源代碼的程序庫,支持對 PNG 圖形文件的創(chuàng)建、讀寫等操作,本文來記錄gentoo升級后libpng不能正常使用的解決辦法.
升級完系統(tǒng)之后,就提示libpng升級了,需要重新emerge @preserved-rebuild,悲劇的是,很多包完全編譯不過了,這幾記錄下部分包的解決方案.
1、gnome-extra/libgda編譯失敗
在鏈接的時候,會提示-lpng14找不到,很明顯是因為libpng升級到1.5導(dǎo)致的,但是,搜索了libgda里面的所有Makefile文件,都沒有發(fā)現(xiàn)有地方寫名鏈接libpng14這個動態(tài)鏈接庫的地方,最后找到的原因是因為/usr/lib64/目錄中有很多xxx.la文件,是libtool用來管理依賴用的,其中有些動態(tài)鏈接庫里面的依賴寫名了-lpng14.
找到了原因,解決起來就方便了,首先通過grep命令找到所有寫死-lpng14的地方,重新emerge這些庫,不過這里發(fā)現(xiàn)有些庫重新emerge了,依賴還是沒有糾正,最后通過手工改這些文件,改成-lpng15.
重新emerge就OK了.
2、opencv編譯失敗
opencv編譯失敗,提示的是error:‘MAX_MEM_LEVEL’ was not declared in this scope等錯誤,google了下,是因為libpng1.5.x將原先暴露出來的png文件結(jié)構(gòu)都隱藏了,頭文件里面只有一個預(yù)先聲明和一堆typedef,這些應(yīng)該是原來在定義這些png圖片結(jié)構(gòu)的時候,依賴的zlib,現(xiàn)在沒法間接依賴了.
解決方法當然就是寫個補丁,強制modules/highgui/src/grfmt_png.cpp這個文件include zlib.h這個頭文件,補丁內(nèi)容如下:
- — modules/highgui/src/grfmt_png.cpp.old 2011-09-19 19:36:49.759516862 +0800
- +++ modules/highgui/src/grfmt_png.cpp 2011-09-19 19:28:04.302185712 +0800 //Vevb.com
- @@ -55,6 +55,7 @@
- #include <libpng/png.h>
- #else
- #include <png.h>
- +#include <zlib.h>
- #endif
- #include “grfmt_png.hpp”
自己寫個local portage,編譯好了opencv.
另外還有wxPython,這個目前真沒辦法了,也是因為libpng1.5.x隱藏了png圖片結(jié)構(gòu)體,導(dǎo)致原來直接通過結(jié)構(gòu)體指針訪問結(jié)構(gòu)體內(nèi)容全部出錯,貌似沒看見補丁,再說了.
新聞熱點
疑難解答
圖片精選