PHP5.3.28のコンパイルに失敗する


PHP5.3.28をソースからコンパイルしようとしたらmake中にこんなエラーが発生して、コンパイルに失敗しました。

$ make ~略~ /PATH_TO/Zend/zend_language_parser.h:317: error: conflicting types for ‘zendparse’ /PATH_TO/Zend/zend_globals_macros.h:35: error: previous declaration of ‘zendparse’ was here make: *** [ext/standard/basic_functions.lo] Error 1

昔、PHP5.4.18のコンパイルに失敗してこんな記事を投稿していて、PHP 5.3.28でも同じエラーになったのかなと思いきやどうも様子が違う様子。PHPのbugsを調べてみると同じエラーに当った人がいて、チケットを上げている人がいた。

Bug #64503 Compilation fails with error: conflicting types for 'zendparse'

一旦解決したように見えてるけど、途中から再度チケットが再開されている。しかしコメントを見てると「PHP5.3系はもうセキュリティ修正しか対応しないよ。もうしらんがな(´・ω・`)」みたいな話も流れている状態で、結局現時点では解決はしていない。どーすっかなと他のチケットを見てみた。

Bug #65685 PHP 5.3 git fails to compile with ZTS

こちらも同じバグの報告。「ZTS有効にしたら関数に矛盾が出てるよ」という報告なんだけど、返信が「古いbison使ってよ」→「おk」で終わってて結局解決していない。ちなみに今回うちでエラーが出ているのはCentOS6.5の環境なので、CentOS5系等の古い環境ならエラーが発生しないのかもしれない。

結局、解決策がなくて自分で修正するしかない状態になった。まぁプロトタイプ宣言が矛盾しているだけなので、どちらかの宣言に合わせればいいだろうと思ったんだけど、いったいどっちに合わせれば正解なのかはちょっとわかんない。そんな中、中国語だけどこんなサイトが引っかかった。

/root/php-5.3.28/Zend/zend_language_parser.h:317: 错误:与‘zendparse’类型冲突

残念ながら文書は読んでも分からんが、修正したコードが載っていたので、こちらを参考にしてうちも修正させてもらった。diffはこんな感じ。

$ diff -u ./Zend/zend_language_parser.h.org ./Zend/zend_language_parser.h --- ./Zend/zend_language_parser.h.org 2013-12-11 05:13:14.000000000 +0900 +++ ./Zend/zend_language_parser.h 2014-04-06 00:47:08.529695557 +0900 @@ -314,7 +314,11 @@ #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus +#ifdef ZTS +int zendparse (void *compiler_globals); +#else int zendparse (void); +#endif #else int zendparse (); #endif

元のサイトでもっと大雑把に修正してたけど、なんとなくZTSの定義も見るようにしてみた。正しいかは謎。とりあえずこれでコンパイルが通るようになりました。実際phpがちゃんと動くかまではまだちゃんと確認してないけど、php -iとかphp -vとかは動くので大丈夫なんじゃないかな(適当)。正常に動かなかったら、また追記するようにします。

作成日:2014/04/06 11:29:37
トラックバック  ※トラックバックは承認後に表示されます。
TrackbackURL:このページのトラックバックの受付は終了しています。

トラックバックはありません。
コメント
名前:

タイトル:

コメント: