CentOS5.4でPHP4.3.3を入れる

May 3, 2010,
tags: 4.3.3 cgi php エラー


このエントリーをはてなブックマークに追加

今更なんだけど、PHP4.3.3を入れなければならない状況になってしまったので、CentOS5.4に入れました。
違うバージョンも使えるように、CGI版として動作させる。

とりあえず.configureをする

./configure --prefix=/usr/local/php4.3.3 --with-config-file-path=/usr/local/php4.3.3 --enable-force-cgi-redirect
--with-config-file-path=/usr/local/php-4.3.3 --program-suffix=4_3_3 --enable-mbstring --enable-soap
--enable-zend-multibyte --with-mysql --with-pgsql  --with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib
--with-zlib --with-mcrypt --with-openssl  --with-imagick

で、makeする

# make

/usr/local/src/php-4.3.3/sapi/cgi/cgi_main.c:120: error: static declaration of ‘optarg’ follows non-static declaration
/usr/include/getopt.h:59: error: previous declaration of ‘optarg’ was here
/usr/local/src/php-4.3.3/sapi/cgi/cgi_main.c:121: error: static declaration of ‘optind’ follows non-static declaration
/usr/include/getopt.h:73: error: previous declaration of ‘optind’ was here
/usr/local/src/php-4.3.3/sapi/cgi/cgi_main.c: In function ‘main’:
/usr/local/src/php-4.3.3/sapi/cgi/cgi_main.c:1048: 警告: passing argument 2 of ‘cfg_get_long’ from incompatible pointer type
make: *** [sapi/cgi/cgi_main.lo] エラー 1

すると上記のようにエラーがでてとまってしまう。
よくわからないけど、たぶん原因はここでいっているとおり「GCC-4.0になってから、グローバルシンボルと同じ名前のstaticシンボルを使うとエラーにするようになったっぽい」ところだと思う。

ためしにgccのバージョンを確認する

スレッドモデル: posix
gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-46)

しかたないので、変数名を置換して保存する、そしてもう一度make

# vim  /usr/local/src/php-4.3.3/sapi/cgi/cgi_main.c

:%s/optarg/optarg_custom/gc
:%s/optind/optind_custom/gc
:qw

# make clean
# make


/usr/local/src/php-4.3.3/sapi/cli/php_cli.c:94: error: static declaration of ‘optarg’ follows non-static declaration
/usr/include/getopt.h:59: error: previous declaration of ‘optarg’ was here
/usr/local/src/php-4.3.3/sapi/cli/php_cli.c:95: error: static declaration of ‘optind’ follows non-static declaration
/usr/include/getopt.h:73: error: previous declaration of ‘optind’ was here

すると今度はphp_cli.cでも同じエラーが発生
先ほどと同じように変数名を置換

# vim  /usr/local/src/php-4.3.3/sapi/cli/php_cli.c

:%s/optarg/optarg_custom/gc
:%s/optind/optind_custom/gc
:qw

# make clean
# make

こんどはmakeが通った。
ということでmake installする

# make install

...
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).

ちゃんとコンパイルできたっぽい。まだ動かしてみてないからわからんけど。。
とりあえず、こんな感じでいいんじゃないでしょうか?
間違ってたら突っ込みいれてください。

続く

comments powered by Disqus