php编译gd出错!(已解决)
在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已编译安装了的
网上搜索不到原因
补充:现在解决了.
可以参见
[url]http://aspn.activestate.com/ASPN/Mail/Message/php-dev/3803631[/url]
可以算是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的make通过了