轉來的,解決的問題是同樣的問題
在32位ubuntu9.04上編譯php5.2.12,到gd時make出錯:
ext/gd/libgd/.libs/gd_png.o: In function `php_gd_gdImageCreateFromPngCtx':
/home/test/php-5.2.12/ext/gd/libgd/gd_png.c:142: undefined reference to `png_check_sig'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] 錯誤 1
直接下載gd,在gd目錄make也類似的錯
gcc -g -O2 -o .libs/annotate annotate.o /usr/local/lib/libiconv.so -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib
./.libs/libgd.so /usr/local/lib/libjpeg.so /usr/local/lib/libfreetype.so /usr/local/lib/libpng14.so -lz -lm
./.libs/libgd.so: undefined reference to `png_check_sig'
collect2: ld returned 1 exit status
make[2]: *** [annotate] 錯誤 1
make[2]:正在離開目錄 `/home/test/gd-2.0.35'
make[1]: *** [all-recursive] 錯誤 1
make[1]:正在離開目錄 `/home/test/gd-2.0.35'
make: *** [all] 錯誤 2
把php版本換為5.2.8也錯,而且從上面單獨編譯gd錯來看,與php無關.libpng已編譯安裝了的
網上搜尋不到原因
補充:現在解決了.
可以參見
http://aspn.activestate.com/ASPN/Mail/Message/php-dev/3803631
可以算是php的一個bug,libpng-1.4.0源碼中的libpng-1.4.0.txt有說明,已經取消了png_check_sig這個函數,改用png_sig_cmp代替.自從libpng-0.90就已經反對使用png_check_sig函數了.這個文章中採用修改php源碼的方法,編輯ext/gd/libgd/gd_png.c,將
if (!png_check_sig (sig, 8)) { /* bad signature */
換成
if (png_sig_cmp (sig, 0, 8)) { /* bad signature */
但我不知道其他哪些地方有沒有這個函數,所以我還是用libpng-1.2.35吧,看libpng-1.2.35.txt,就沒有提png_check_sig的事.
編譯安裝libpng-1.2.35後,php-5.2.12的mak