- blogs:
- cles::blog

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

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"とクラッシュした理由がちゃんと表示されています。
† パイプを通すとエラーメッセージが消える
今回のプログラムは出力をパイプ経由で受け取っていたのですが、エラーメッセージの部分は取得されていませんでした。この部分が取れないのがどうも腑に落ちないので、さらに追試としてエラーメッセージをパイプ経由でファイルに出力してみるとエラーメッセージがごっそりなくなってしまうことが分かりました。
上記の追試から前述の"Cannot create temporary file in c:\: No such file or directory"の部分は標準出力でも、標準エラーでもないようなのですが、一体これは何の出力なんでしょうか。謎は深まるばかりです。
- *1: 僕のマシンにはC:ドライブはありません。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3874
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110662)
3 . 年次の人間ドックへ(110289)
4 . 2023 年分の確定申告完了!(1つめ)(109827)
5 . 三菱鉛筆がラミーを買収(109736)