libpng版本問題導致的PHP調用gd擴展出錯解決方案
寫一個測試gd的腳本test.php,然后在命令行執行,報錯信息如下:
php test.phplibpng warning: Application was compiled with png.h from libpng-1.5.6libpng warning: Application is running with png.c from libpng-1.2.49libpng 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 -lpng12collect2: ld returned 1 exit statusmake: *** [sapi/fpm/php-fpm] Error 1
我擦,默認會調用系統的庫?。。【幾g調用png的地方就只有2個,一個是php的編譯參數–with-png-dir=/usr/local/libpng, 另一個是gd庫,于是重新編譯gd,在編譯的時候發現這樣的2行:
原來在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... nochecking for libpng-config... /usr/local/bin/libpng-config
2、兩個版本都可以保留,編譯后,修改Makefile文件。
修改262行左右 LIBPNG12_CONFIG的值,改成跟LIBPNG_CONFIG 一樣即可,如:
LIBPNG12_CONFIG = /usr/bin/libpng12-configLIBPNG_CONFIG = /usr/local/bin/libpng-config
修改成
LIBPNG12_CONFIG = /usr/local/bin/libpng-configLIBPNG_CONFIG = /usr/local/bin/libpng-config
然后就make && make install就OK了。
相關文章:
1. 解決Android Studio 格式化 Format代碼快捷鍵問題2. JavaEE SpringMyBatis是什么? 它和Hibernate的區別及如何配置MyBatis3. SpringBoot+TestNG單元測試的實現4. Python使用urlretrieve實現直接遠程下載圖片的示例代碼5. 完美解決vue 中多個echarts圖表自適應的問題6. vue實現web在線聊天功能7. Springboot 全局日期格式化處理的實現8. JavaScript實現頁面動態驗證碼的實現示例9. php解決注冊并發問題并提高QPS10. Java使用Tesseract-Ocr識別數字
