萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Gentoo 升級後 libpng 1.5 導致編譯失敗(libgda、opencv)的解決方案

Gentoo 系統升級將 libpng 從 1.4 升級至 1.5 後,因 API 變更(結構體隱藏、符號移除),導致部分套件(如 libgda、opencv、wxPython)無法編譯。本文提供兩個典型案例的修正方法。

案例一:gnome-extra/libgda 連結失敗找不到 -lpng14

原因:.la 檔案(libtool 依賴描述)中仍硬編碼 -lpng14。

解決步驟:

  1. 搜尋所有殘留 -lpng14 的 .la 檔:grep -r '\-lpng14' /usr/lib64/*.la
  2. 重新 emerge 相關套件以重建 .la 檔,或手動將 -lpng14 改為 -lpng15(或 -lpng)。
  3. 重新 emerge libgda。

案例二:opencv 編譯錯誤 'MAX_MEM_LEVEL' 未宣告

原因:libpng 1.5 隱藏了內部結構,原程式碼透過 png.h 間接依賴 zlib 定義的巨集,現失效。

解決:為 grfmt_png.cpp 強制加入 zlib.h

--- modules/highgui/src/grfmt_png.cpp.old
+++ modules/highgui/src/grfmt_png.cpp
@@ -55,6 +55,7 @@
 #include 
 #else
 #include 
+#include 
 #endif
 #include "grfmt_png.hpp"

建立 local ebuild 套用此 patch,重新 emerge opencv。

案例三:wxPython 仍無解

同樣因結構體隱藏導致大量直接存取結構體欄位的程式碼失效,且無現成 patch,需等待上游修正或自行移植。

總結

libpng 大版本升級屬重大變更,建議升級前先閱讀 emerge -pv @preserved-rebuild 輸出,並準備好對關鍵套件打 patch 或降級 libpng 過渡。

copyright © 萬盛學電腦網 all rights reserved