BLOGTIMES
2010/10/28

TEMPがないとMinGWのGCCがクラッシュする

  c 
このエントリーをはてなブックマークに追加

MinGWのGCCを内部で呼び出しているアプリが下記のような変なエラーを吐いて動かないので調べて欲しいと言われたので、一日いろいろ試行錯誤していました。特定のマシンでしか発現しないのと、VCランタイムのエラーだったこともあり、dll周りの線で攻めてみたのですが、結果としてはTEMP環境変数がきちんと設定されていないというオチでした

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

解決のヒントとなったのは「Cygwin compiling error: “this application has requested the runtime to terminate it in an unusual way”」というエントリ。ここにTEMPがないとgccがクラッシュすると記載されています。ちなみにGCCが使う環境変数は「Environment Variables - Using the GNU Compiler Collection (GCC)」に記載されていて、TEMPDIRを見るとは書いてあるのですが、MinGWの場合にはTEMPもしくはTMPを参照しているようです。

再現実験

コマンドラインから下記のようにTEMP及び、TMPをおかしな値*1にして再現実験を行ってみると報告されたとおりのエラーを出すことができました。ところが、ここには"Cannot create temporary file in c:\: No such file or directory"とクラッシュした理由がちゃんと表示されています。

G:\MinGW\bin>gcc --version gcc (GCC) 4.5.0 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. G:\MinGW\bin>set TMP=c:\ G:\MinGW\bin>set TEMP=c:\ G:\MinGW\bin>gcc test.c Cannot create temporary file in c:\: No such file or directory This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

パイプを通すとエラーメッセージが消える

今回のプログラムは出力をパイプ経由で受け取っていたのですが、エラーメッセージの部分は取得されていませんでした。この部分が取れないのがどうも腑に落ちないので、さらに追試としてエラーメッセージをパイプ経由でファイルに出力してみるとエラーメッセージがごっそりなくなってしまうことが分かりました。

G:\MinGW\bin>gcc test.c >out 2>err G:\MinGW\bin>cat out G:\MinGW\bin>cat err This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

上記の追試から前述の"Cannot create temporary file in c:\: No such file or directory"の部分は標準出力でも、標準エラーでもないようなのですが、一体これは何の出力なんでしょうか。謎は深まるばかりです。

  • *1: 僕のマシンにはC:ドライブはありません。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3874
Trackbacks
プチネタでまたavrを使ってみようと思い、win-avrをダウンロードしてインストールした。試しにcygwinの環境でコンパイラを動かしてみると以下のエラーメッセージが。。 $ avr32-gcc hello.c This application has requested the Runtime to terminate it in an unusual way.
茶国 Rev3 (2011/02/19 15:03)
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン