久々に Haskell コードを手元のPC内でビルドしたら動かなかった(最近は Docker で遊んでたので). 調べてみたら,Creators Update が原因らしい.

別にぼくが特別なことをしたわけではないが,手順を残しておく(日本語の記事は無かったし).

動かない

stack setup でも stack build でも,とにかく動かない. エラーメッセージはイロイロ出た後

...
...
'gcc.exe' failed in phase `C Compiler'. (Exit code: -1073741502)

と出てくる.

これでググってみたところ,以下の Issue にたどり着いた.

読んでみると,どうやら Windows 10 の Creators Update が原因らしい. (BoW 使いたくて,5月頭ぐらいにあげちゃってた)

GHC のチケットもあった. 最新の GHC8.2.1では修正済みらしいが,このままでは古い GHC が動かない(stack の意味がなくなっちゃう…). Haskell Platform では対応済みらしいので,そっち派の人はインストールしなおせばよいらしい(そんな人いるか?).

直し方

長くなったけど直し方. stack 内の ghc.exe をパッチを当てて作れば良いんだけど,すでに当ててくれてるやつがある.

マジで神. ここの binaries の中にある各バージョンの gcc.exe をてもとのと置き換えればよい. 場所は find | grep '/gcc.exe' とかすれば良い(BoW 使ってw). 全部探索してると時間かかるので,stack のある場所の近くとあたりを付けて,AppData以下で探した.

% which stack.exe                                                                                                                                                                           /mnt/c/Users/hoge/AppData/Roaming/local/bin/stack.exe
% find AppData | grep '/gcc.exe'
find: `AppData/Local/ElevatedDiagnostics': 許可がありません
find: `AppData/Local/lxss/cache': 許可がありません
find: `AppData/Local/lxss/data': 許可がありません
find: `AppData/Local/lxss/home': 許可がありません
find: `AppData/Local/lxss/mnt': 許可がありません
find: `AppData/Local/lxss/root': 許可がありません
find: `AppData/Local/lxss/rootfs': 許可がありません
find: `AppData/Local/lxss/temp': 許可がありません
AppData/Local/Programs/stack/x86_64-windows/ghc-7.10.3/mingw/bin/gcc.exe
AppData/Local/Programs/stack/x86_64-windows/ghc-8.0.1/mingw/bin/gcc.exe
AppData/Local/Programs/stack/x86_64-windows/ghc-8.0.2/mingw/bin/gcc.exe
AppData/Local/Programs/stack/x86_64-windows/_ghc-8.0.2/mingw/bin/gcc.exe
find: `AppData/Local/Temp/A10AA448-10F4-4F02-8411-471D4A5ABD89': 許可がありません
find: `AppData/LocalLow/Oracle/Java/jre1.8.0_101_x64': 許可がありません
find: `AppData/LocalLow/Oracle/Java/jre1.8.0_111_x64': 許可がありません
find: `AppData/LocalLow/Oracle/Java/jre1.8.0_121_x64': 許可がありません
find: `AppData/LocalLow/Oracle/Java/jre1.8.0_131_x64': 許可がありません
AppData/Roaming/stack/programs/x86_64-windows/ghc-8.0.1/mingw/bin/gcc.exe

(許可がありませんwは置いておいて)AppData/Local/Programs/stack/x86_64-windows/ghc-7.10.3/mingw/bin/gcc.exe にあった. これを置換すれば良い(怖かったら念のため元の gcc.exe をリネームして残しておけばいいんじゃない?). 上記のリポジトリに 8.0.2 のは無いのだが(おそらく) 8.0.1 のでいいと思う(ぼくのはそれで今のところ動いてる).

これで stack setupstack build もできるはず.

おしまい

Windows 怖い.