FreeBSDのportsで、phpを最新の5.2.9へアップデートしたら、
% php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/pcre.so' - /usr/local/lib/php/20060613/pcre.so: Undefined symbol "php_pcre_free" in Unknown on line 0
PHP 5.2.9 with Suhosin-Patch 0.9.7 (cli) (built: Apr 7 2009 07:46:58)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
というような具合に、変なWarningメッセージが出るようになってしまいました。
以前にも
ということがあったので、/usr/local/etc/php/extensions.ini の中身の順番を入れ替えればいいのかな?と思ったんですが、今回は、そうではありませんでした。
% nm /usr/local/lib/php/20060613/pcre.so | grep php_pcre_free
U php_pcre_free
というわけで、たしかに、undefined symbolになってしまってるわけだったんですが、このシンボル、どこで定義されているのか、まったくわからず。
なんとなく別のホストで調べてみると
% nm /usr/local/lib/php/20060613/pcre.so | grep php_pcre_free
おや?出てこない。
問題がおきているホストで、php5-pcreを再ビルドしたら、問題は解決してしまいました。
アップデートする前に、古いバージョンのincludeファイルがどこかにあって、最初は、それを使って、pcre.soがビルドされてしまってた・・・といったところでしょうか、考えられる原因としては。
☆
そういえば、php5-pcreって、portsから削除された、という話があった気がします。
/usr/ports/UPDATINGを見ると
20081211:
AFFECTS: users of lang/php5
AUTHOR: pav@FreeBSD.org, itetcu@FreeBSD.org, ale@FreeBSD.orgAs of php 5.2.7, pcre extension is distributed with the core php5 package,
and not as a standalone module anymore. Follow these steps to update your
installation:Portupgrade users:
pkg_delete -f php5-pcre-5.2.6
pkgdb -F
portupgrade as usual
とあるように、削除しろ、って書いてありますね。
いったいどういうことなんだ?ということで、cvswebでチェック。
http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/php5-pcre/Makefile
Revision 1.6のところを見ると
Update to 5.2.9 release and re-add pcre extension.
re-addって・・・復活したんですか[E:coldsweats01]
/usr/ports/UPDATINGに書いておかなくてよいのでしょうかねぇ。
0 件のコメント:
コメントを投稿