Hatena::ブログ(Diary)

hnwの日記 このページをアンテナに追加 RSSフィード

[プロフィール]
 | 

2008年8月19日(火) MacPortsからインストールしたgccについて混乱中 このエントリーを含むブックマーク このエントリーのブックマークコメント

先日の記事「Xcodeのgcc-3.3の件」の続きです。Xcodegcc-3.3はイマイチ期待していたものと違ったので、MacPortsに期待してみることにしましょう。Macportsにはgccらしきものがたくさんあります。本記事執筆時点で下記のような状況です。

パッケージ名バイナリ正常動作テスト失敗率*1備考(2分くらい触った感想)
apple-gcc33gcc-apple-3.3△?19/4292リンク時に「indirect jmp without `*'」と言われるのが怪しい / php-5.0.xのコンパイルは通るが、出来たバイナリの挙動があやしい
apple-gcc40gcc-apple-4.019/4292-
apple-gcc42gcc-apple-4.240/4292-
gcc33-×-パッケージのインストールが失敗する
gcc34-×-パッケージのインストールが失敗する
gcc40-×-パッケージのインストールが失敗する
gcc41gcc-mp-4.120/4292リンク時に「indirect jmp without `*'」と言われるのが怪しい
gcc42gcc-mp-4.221/4292-
gcc43gcc-mp-4.342/4292-
gcc44gcc-mp-4.442/4292まだβリリースですけどね

そもそも僕が何故こんなことを始めたかというと、MacOSXPHP 5.0.xをコンパイルしようと思ったんですね。ただ、この頃のPHP(というか当時の鬼車)がvarargs.hをincludeしているせいで、gcc 4.x系では下記のようなエラーが出てコンパイルできないんです。で、gcc 3.xを探していたというわけです。

/usr/lib/gcc/i686-apple-darwin8/4.0.1/include/varargs.h:4:2: error: #error "GCC no longer implements <varargs.h>."
/usr/lib/gcc/i686-apple-darwin8/4.0.1/include/varargs.h:5:2: error: #error "Revise your code to use <stdarg.h>."

ところがマトモに動くgcc3.xはapple-gcc33の1個だけしか手に入らない上に、リンク時に怖そうなwarning「indirect jmp without `*'」が出ます。これ、何なんでしょうね?しかも、PHP-5.0.xをコンパイルすると、一見動いているんですが、時々bus errorで落ちます。

$ php-5.0.5 -r 'printf("%e\n", 3e300);'
zsh: bus error  php-5.0.5 -r 'printf("%e\n", 3e300);'

apple-gcc33で作ったPHP 5.2.6ではこんな問題は起きないので、PHP側の問題のような気もするのですが、一方でXcodegcc 4.0で作ったPHP 5.0.5(mbstringなし)では上記のprintfが正しく実行できたりして、やっぱりgccが悪いのかなあ、などと混乱中です。


もう何が何やらわからないのですが、怖いから標準のgccだけ使ってろという結論で良いですかね?何か情報をお持ちの方がいらしたら教えてください。

*1php-5.2.6のmake testで失敗したテスト数、ちなみにXcodeのgcc4.0でも40/4292。localeまわりのテストが共通で失敗してます

トラックバック - http://d.hatena.ne.jp/hnw/20080819
 | 
ページビュー
2270407