libpng版本問(wèn)題導(dǎo)致的PHP調(diào)用gd擴(kuò)展出錯(cuò)解決方案
寫一個(gè)測(cè)試gd的腳本test.php,然后在命令行執(zhí)行,報(bào)錯(cuò)信息如下:
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的時(shí)候,已經(jīng)指定了png的位置–with-png-dir=/usr/local/libpng,使用的是1.5.6,為什么執(zhí)行的時(shí)候還會(huì)調(diào)用自帶的libpng-1.2.49 ,于是把系統(tǒng)的 libpng-1.2.49 刪除掉(因?yàn)槭菧y(cè)試環(huán)境,就隨便刪了,線上服務(wù)器自重),重新編譯php,我了個(gè)去,編譯不過(guò)去,提示:(這里是因?yàn)間d有調(diào)用,導(dǎo)致php編譯gd庫(kù)的時(shí)候找不到)
/usr/bin/ld: cannot find -lpng12collect2: ld returned 1 exit statusmake: *** [sapi/fpm/php-fpm] Error 1
我擦,默認(rèn)會(huì)調(diào)用系統(tǒng)的庫(kù)!!!編譯調(diào)用png的地方就只有2個(gè),一個(gè)是php的編譯參數(shù)–with-png-dir=/usr/local/libpng, 另一個(gè)是gd庫(kù),于是重新編譯gd,在編譯的時(shí)候發(fā)現(xiàn)這樣的2行:
原來(lái)在gd這里,就已經(jīng)調(diào)用了系統(tǒng)的libpng-1.2.49。 這里順便說(shuō)下,libpng12 、libpng15、libpng16 數(shù)字就是代表版本號(hào)1.2.X ,1.5.X ,1.6.X 具體可以看
ls /usr/include/libpng* 知道問(wèn)題所在,解決問(wèn)題就比較有針對(duì)性了,2個(gè)方法:
1、把系統(tǒng)自帶的給刪除了,這個(gè)覺(jué)得比較不靠譜,怕有互相依賴,有后遺癥就不好了。
刪除后編譯的時(shí)候就變成:
checking for libpng12-config... nochecking for libpng-config... /usr/local/bin/libpng-config
2、兩個(gè)版本都可以保留,編譯后,修改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了。
相關(guān)文章:
1. XML入門的常見(jiàn)問(wèn)題(一)2. html小技巧之td,div標(biāo)簽里內(nèi)容不換行3. PHP字符串前后字符或空格刪除方法介紹4. AspNetCore&MassTransit Courier實(shí)現(xiàn)分布式事務(wù)的詳細(xì)過(guò)程5. jsp cookie+session實(shí)現(xiàn)簡(jiǎn)易自動(dòng)登錄6. css進(jìn)階學(xué)習(xí) 選擇符7. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法8. 解析原生JS getComputedStyle9. Echarts通過(guò)dataset數(shù)據(jù)集實(shí)現(xiàn)創(chuàng)建單軸散點(diǎn)圖10. nestjs實(shí)現(xiàn)圖形校驗(yàn)和單點(diǎn)登錄的示例代碼
