萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Gentoo升級後libpng無法正常編譯怎麼辦?

Gentoo升級後libpng無法正常編譯怎麼辦?

  在Gentoo升級之前,用戶還能能正常使用libpng,而在升級Gentoo系統後,不少用戶出現了libpng編譯不正常的情況,大量包無法編譯,下面小編就給大家介紹下解決libpng編譯不正常的方法。

Gentoo升級後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種情況的解決方法,可根據用戶具體情況來解決問題。

copyright © 萬盛學電腦網 all rights reserved