2009年4月8日水曜日

(FreeBSD) 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

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メッセージが出るようになってしまいました。



以前にも

(FreeBSD) PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/sqlite.so' - /usr/local/lib/php/20060613/sqlite.so: Undefined symbol "spl_ce_Countable" in Unknown on line 0

ということがあったので、/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.org



  As 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 件のコメント:

コメントを投稿