PHP 4 の --enable-versioning はトラブルの元か?
PHP 3 と PHP 4 を共存させる場合に,configure オプションに --enable-versioning を指定します.
実はこれが思わぬ落とし穴になる場合があります.
それは,DSO で拡張モジュールが動的にロードできないというものです.
PHP 4.4.4 + Apache 1.3.37 on Solaris 10 x86 の環境なので,もしかしたら環境依存かもしれません.
コンパイル・インストールはうまくいきますが,Apache を再起動すると以下のようなエラーが出ます.
- SQLite の場合
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20020429/sqlite.so' - ld.so.1: httpd: fatal: relocation error: file /usr/local/lib/php/extensions/no-debug-non-zts-20020429/sqlite.so: symbol executor_globals: referenced symbol not found in Unknown on line 0
- Xdebug の場合
Failed loading /usr/local/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so: ld.so.1: httpd: fatal: relocation error: file /usr/local/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so: symbol zend_compile_file: referenced symbol not found
CLI 版では,全く問題なくロードできるので,原因が全然分かりませんでした.
これらのエラーが出る場合は,--enable-versioning を外して PHP 4 を再コンパイルするとうまくいくと思います.
もはや,PHP 3 を共存させることは皆無に等しいと思うので,--enable-versioning のことは忘れてしまったほうがよさそうです.
参考までに --enable-versioning をマニュアルを見てみると,
--enable-versioning
要求されるシンボルのみをエクスポートします。 詳細な情報は INSTALL を参照ください。
--enable-versioning
Solaris 2.x および Linux が提供するバージョン管理機能を 有効にします。PHP 3 限定です!
とあります.
- Configure オプション
http://www.php.net/manual/ja/configure.php
- ref.: Blog::koyhoge - [PHP] --enable-versioningを止めるの巻
http://d.hatena.ne.jp/koyhoge/20061213/1165999933