[PHP-dev 1314] Re: PHPにバンドルしているonigurumaについて
KOYAMA Tetsuji
koyama @ hoge.org
2006年 9月 16日 (土) 21:59:03 JST
小山です。
こちらにも macosx-ppc があるので調べてみました。
On 9/16/06, Rui Hirokawa <rui_hirokawa @ ybb.ne.jp> wrote:
> 廣川です。
>
> やはり,環境(Xcode)依存の問題なんですね。
> 金井さんの環境で現れたエラーもvarginがらみだったのでしょうか。
>
> main/php_config.h のHAVE_STDARG_PROTOTYPESは
> どのように設定されていますか?
>
> configureにより生成されたconfig.logの
> "length prototypes and stdarg.h"直後に
> エラーが発生していますか?
>
> main/php_config.hに以下の行があった場合,
> #undef HAVE_STDARG_PROTOTYPES
> これを
> #define HAVE_STDARG_PROTOTYPES 1
> に変えるとコンパイルがとおりますか?
廣川さんの予想通り configure の stdarg.h のチェックに失敗しているせいでした。
#define HAVE_STDARG_PROTOTYPES 1
にするとコンパイルは通ります。
で、なぜ configure の stdarg.h チェックに失敗するかですが、どうも
Xcode 2.4 の gcc-4.0.1 の最適化のバグのようです。
config.m4 の該当部分のチェックコード
#include <stdarg.h>
int foo(int x, ...) {
va_list va;
va_start(va, x);
va_arg(va, int);
va_arg(va, char *);
va_arg(va, double);
return 0;
}
int main() { return foo(10, "", 3.14); }
を -O2 でコンパイルしたバイナリを実行すると Bus Error に
なります。最適化なしだと無事に実行できます。
--
小山哲志@ビート・クラフト
koyama @ beatcraft.com
koyama @ hoge.org
PHP-dev メーリングリストの案内