x86_64 Linux の PHP5.2 + gd(jpegサポート)でハマったこと

x86_64 Linux の PHP5.2 + gd(jpegサポート)でハマったことWeb開発者の備忘録x86_64ベースLinuxでPHP5.2 を入れた時にハマった内容を、備忘録兼ねてメモしておきます。

現象としては、configure , make ともうまくいったのに、gd で jpegを使う関数を使った時にPHPプログラムが終了してしまう、というものでした。
PHPを入れてプログラム開発をして初めて気づきました(かなり焦って死ぬかと思いました)。

原因は、多分ですが gd と jpegライブラリの設置場所の問題。
gdはPHP付属でソースからビルド。インストール場所は /usr/local/php
jpegライブラリ(jpeg-6b)はyumからインストールで、インストール場所は /usr/lib64

このjpegライブラリを、ソースからビルドし、インストール場所を /usr/local にすることでgd(php)と場所をあわせ、さらに /etc/ld.so.conf に /usr/local/lib を追加することで解決しました。

(参考)
問題発生時のconfigure オプション(コマンド)

# ./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-gd –with-libdir=lib64 –enable-exif –with-mysql=/usr/bin –with-pdo-mysql=/usr/bin –with-zlib –enable-mbstring –enable-mbregex –enable-zend-multibyte –enable-module=so –with-mysql=/usr –with-pdo-mysql=/usr

解決時のconfifureオプション(コマンド)
jpeg-6b

# ./configure –enable-shared

PHP

# ./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-gd –with-libdir=lib64 –enable-exif –with-mysql=/usr/bin –with-pdo-mysql=/usr/bin –with-zlib –enable-mbstring –enable-mbregex –enable-zend-multibyte –enable-module=so –with-mysql=/usr –with-pdo-mysql=/usr –with-gd –with-jpeg-dir

問題解決までの途中、php make時にこんなメッセージも出ました。下記メッセージでハマった人にも適用できる内容かと思うのでご参考までに載せておきます。

xxx/php-5.x.x/ext/gd/libgd/gd_jpeg.c -o ext/gd/libgd/gd_jpeg.o && echo > ext/gd/libgd/gd_jpeg.lo
xxx/php-5.x.x/ext/gd/libgd/gd_jpeg.c: In function
`fatal_jpeg_error’:
xxx/php-5.x.x/ext/gd/libgd/gd_jpeg.c:xx: error: structure has no member named `client_data’
xxx/php-5.x./ext/gd/libgd/gd_jpeg.c: In function `gdImageJpegCtx’:
・・・・(以下略)・・・・

余談ですが。
web上で同じような現象無いかと思い調べていたら、同じ事象で悩んでいる人がいました(ページ一番下の人)。10ヶ所以上のサイトに問い合わせしたのに誰も返事くれん!と嘆いてました。。