首頁  >  文章  >  後端開發  >  libpng版本問題導致的PHP呼叫gd擴充出錯解決方案

libpng版本問題導致的PHP呼叫gd擴充出錯解決方案

伊谢尔伦
伊谢尔伦原創
2016-11-26 14:36:052240瀏覽

寫一個測試gd的腳本test.php,然後在命令列執行,報錯訊息如下:

php test.phplibpng warning: Application was compiled with png.h from libpng-1.5.6
libpng warning: Application is running with png.c from libpng-1.2.49
libpng error: Incompatible libpng version in application and library
[read_png_file] png_create_read_struct failed

很納悶,在編譯gd、php的時候,已經指定了png的位置–with-png-dir=/usr /local/libpng,使用的是1.5.6,為什麼執行的時候還會呼叫自帶的libpng-1.2.49 ,於是把系統的libpng-1.2.49 刪除掉(因為是測試環境,就隨便刪了,線上伺服器自重),重新編譯php,我了個去,編譯不過去,提示:(這裡是因為gd有調用,導致php編譯gd函式庫的時候找不到)

/usr/bin/ld: cannot find -lpng12
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] Error 1

我擦,預設會調用系統的庫! ! !編譯呼叫png的地方只有2個,一個是php的編譯參數–with-png-dir=/usr/local/libpng, 另一個是gd函式庫,於是重新編譯gd,在編譯的時候發現這樣的2行:

libpng版本問題導致的PHP呼叫gd擴充出錯解決方案

原來在gd這裡,就已經呼叫了系統的libpng-1.2.49。 這裡順便說下,libpng12 、libpng15、libpng16 數字就是代表版本號1.2.X ,1.5.X ,1.6.X 具體可以看​​

ls /usr/include/libpng* 知道問題所在,解決問題就比較有針對性了,2個方法:

1、把系統自帶的給刪除了,這個覺得比較不靠譜,怕有互相依賴,有後遺症就不好了。

刪除後編譯的時候變成:

checking for libpng12-config... no
checking for libpng-config... /usr/local/bin/libpng-config

2、兩個版本都可以保留,編譯後,修改Makefile檔。

修改262行左右 LIBPNG12_CONFIG的值,改成跟LIBPNG_CONFIG 一樣即可,如:

LIBPNG12_CONFIG = /usr/bin/libpng12-config
LIBPNG_CONFIG = /usr/local/bin/libpng-config

修改成

LIBPNG12_CONFIG = /usr/local/bin/libpng-config
LIBPNG_CONFIG = /usr/local/bin/libpng-config

然後就make && make installOK了。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn