php+GD

PHPでなんだかグラフを書くウェブアプリをいれるとのこと。GDライブラリとPHPを組み合わせてみました。例によってビルドするたけでいろいろとトラブルが。

GDのコンパイル

gdをコンパイルリンク。configureのhelpを参照するとjpegサポートがどうのとか、iconvがどうのとかってのがいろいろと出てきますが、./configureでだいたいはデフォルトで有効になるのでこれだけでいいみたい。最初はこんなふうなconfigureをかけていました。

$ ./configure --with-png=/usr/local --with-freetype=/usr/local --with-jpeg=/usr/local --with-libiconv-prefix=/usr/local --with-xpm

これでmakeしてmake isntallすると、phpのconfigureでなんだかよくわからないことに。phpのconfigure時にこんなエラーがでます。

$ ./configure  (略)
Undefined                       first referenced
 symbol                             in file
gdImageColorMatch                   ext/gd/gd.lo
gdImageEllipse                      ext/gd/gd.lo
gdImageAALine                       ext/gd/gd.lo
gdImageRotate                       ext/gd/gd.lo
gdImagePngCtx                       ext/gd/gd.lo
gdImageAntialias                    ext/gd/gd.lo
gdImageCreateFromPngCtx             ext/gd/gd.lo
gdImageCreateFromPng                ext/gd/gd.lo
ld: fatal: Symbol referencing errors. No output written to sapi/cli/php
collect2: ld returned 1 exit status

ということで、簡単にconfigure。

$ ./configure
$ /usr/local/bin/make
# /usr/local/bin/make install

PHPコンパイル

でもって、次にphpを再configureかけます。最初こんなかんじでgdをphpに見せようとしたんですが、

$ ./configure --with-gd

これだとphpにバンドルされているgdが有効になるだけなんですね。
php -iの出力で確認できます。

gd

GD Support => enabled
GD Version => bundled (2.0.28 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
PNG Support => enabled
WBMP Support => enabled
XBM Support => enabled

--with-gd=/usr/localってなことをつけないといけないみたい。ということでこんなかんじで。

$ ./configure --with-gd=/usr/local そのほかいっぱい

おっと、エラーです。やっぱりというかなんというか。

(前略)
checking for gdImageSetTile in -lgd... no
checking for gdImageEllipse in -lgd... no
checking for gdImageSetBrush in -lgd... no
checking for gdImageStringTTF in -lgd... no
checking for gdImageStringFT in -lgd... no
checking for gdImageStringFTEx in -lgd... no
checking for gdImageColorClosestHWB in -lgd... no
checking for gdImageColorResolve in -lgd... no
checking for gdImageGifCtx in -lgd... no
checking for gdCacheCreate in -lgd... no
checking for gdFontCacheShutdown in -lgd... no
checking for gdFreeFontCache in -lgd... no
checking for gdNewDynamicCtxEx in -lgd... no
checking for gdImageCreate in -lgd... no
configure: error: GD build test failed. Please check the config.log for details.

config.logを覗くとこんなの。

configure:40565: gcc -o conftest -g -O2  -D_POSIX_PTHREAD_SEMANTICS -R/usr/local
/lib -L/usr/local/lib  -R/usr/ucblib -L/usr/ucblib -R/usr/local/lib/gcc/sparc-su
n-solaris2.9/4.1.1 -L/usr/local/lib/gcc/sparc-sun-solaris2.9/4.1.1 -R/usr/local/
lib -L/usr/local/lib -R/usr/X11R6/lib -L/usr/X11R6/lib conftest.c -lgd  -lgd -lf
reetype -lX11 -lXpm -lpng -lz -ljpeg -lz -lresolv -lm -ldl -lnsl -lsocket  -lgcc
 1>&5
Undefined                       first referenced
 symbol                             in file
libiconv_close                      /usr/local/lib/libgd.so
libiconv_open                       /usr/local/lib/libgd.so
libiconv                            /usr/local/lib/libgd.so
ld: fatal: Symbol referencing errors. No output written to conftest
collect2: ld returned 1 exit status
configure: failed program was:

libiconvが見えないみたい。仕方がないのでLDFLAGS環境変数を定義してあげます。

$ export LDFLAGS=-liconv
$ ./configure --(略
$ /usr/local/bin/make
# /usr/local/bin/make install
$ php -i
gd

GD Support => enabled
GD Version => 2.0 or higher
FreeType Support => enabled
FreeType Linkage => with freetype
GIF Read Support => enabled
GIF Create Support => enabled
JPG Support => enabled
WBMP Support => enabled

うまくいったようです。ここを参照しました。