在Gentoo升級之前,用戶還能能正常使用libpng,而在升級Gentoo系統後,不少用戶出現了libpng編譯不正常的情況,大量包無法編譯,下面小編就給大家介紹下解決libpng編譯不正常的方法。
升級完系統之後,就提示libpng升級,需要重新emerge @preserved-rebuild,但很多包完全編譯不過了,以下提供解決方案。
1、gnome-extra/libgda編譯失敗
在鏈接的時候,會提示-lpng14找不到,很明顯是因為libpng升級到1.5導致的。但是,搜索了libgda裡面的所有Makefile文件,都沒有發現有地方寫名鏈接libpng14這個動態鏈接庫的地方。最後找到的原因是因為/usr/lib64/目錄中有很多xxx.la文件,是libtool用來管理依賴用的,其中有些動態鏈接庫裡面的依賴寫名了-lpng14。
找到了原因後,首先通過grep命令找到所有寫死-lpng14的地方,重新emerge這些庫。不過這裡發現有些庫重新emerge了,依賴還是沒有糾正。最後通過手工改這些文件,改成-lpng15。
重新emerge就OK了。
2、opencv編譯失敗
opencv編譯失敗,提示的是error:‘MAX_MEM_LEVEL’ was not declared in this scope等錯誤。是因為libpng1.5.x將原先暴露出來的png文件結構都隱藏了,頭文件裡面只有一個預先聲明和一堆typedef。這些應該是原來在定義這些png圖片結構的時候,依賴的zlib,現在沒法間接依賴了。
解決方法是寫個補丁,強制modules/highgui/src/grfmt_png.cpp這個文件include zlib.h這個頭文件,補丁內容如下:
— 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
@@ -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圖片結構體,導致原來直接通過結構體指針訪問結構體內容全部出錯,無補丁。
上面就是Gentoo升級後libpng無法編譯的解決方法介紹了,本文一共介紹了2種情況的解決方法,可根據用戶具體情況來解決問題。