続・俺と gcc 4.3.2 と mplayer
んでまあその後。
- 2008-10-12b release になったら __stdcall のシンボル名も直ってた(3.3.5 のと同じになってた)
- コマンドラインのオプション設定によっては signal 11 (SIGSEGV) で落ちていた。たとえば -vo kva だと OK だけど -vo kva:dive とかちょっと伸ばすともう落ちる。どうも最適化かけすぎるとヘンなことになるようだが最適化落とさんとイカンぐらいなら 3.3.5 のままでやったほうがマシなのだ(ただでさえコンパイル時間が違いすぎるのに)。
とりあえず関数の先頭にある
char *func(char *p1, char *p2) { char tmpstr[strlen(p1) + strlen(p2) + 1]; ...
みたいなコードはやばげな気配(つーか、こんな書き方、許されてたんですね)。
char *func(char *p1, char *p2) { volatile size_t n_tmpstr = strlen(p1) + strlen(p2) + 1; char tmpstr[n_tmpstr]; ...
みたいなのならとりあえず落ちずに動いた(volatile がないとダメ)。正直よくわかんね。
んでまあこんな感じです → mplayer-k-dev-svn-r26012-mybuild-gcc432test-20081015.zip
ついでに snapwrap.dll も gcc.4.3.2 で再構築してみましたが、試せる環境が手元に現在まったくないため、ほんとに動くかどうかよくわかりません(ひどい)。試してみたい方は、アーカイブ中の snapwrap_rebuilt/gcc432/snapwrap.dll で既存の snapwrap.dll を適当に上書きしてください。
とりあえず、寝る…。