Haskell-堆栈:构建期间出现访问冲突错误

Haskell-Stack: Access violation error during build

过去几天我一直在尝试使用堆栈构建我的 Haskell 项目,但我遇到了访问冲突错误。据我了解,我拥有最新的堆栈版本和 GHC。

在我将一个库添加到我的 cabal 文件之前,这一切最初都是有效的。我现在已经删除了它,但错误仍然存​​在。我还回到了我的代码肯定能正常工作的时候,所以我确定这是由堆栈引起的。

我试过卸载 stack,删除 .stack-work 并重新安装。然后进行堆栈设置。我尝试了多种命令但没有结果。

我现在也尝试使用 Stack 创建一个新项目并构建它,但我遇到了同样的问题。

stack build

Building all executables for `haskell-project' once. After a successful build of all of them, only specified executables will be rebuilt.
haskell-project-0.1.0.0: configure (exe)
Access violation in generated code when reading 000000000e58391a

--  While building custom Setup.hs for package haskell-project-0.1.0.0 using:
      C:\sr\setup-exe-cache\x86_64-windows\Cabal-simple_Z6RU0evB_2.0.1.0_ghc-8.2.2.exe --builddir=.stack-work\distc8418a7 configure --with-ghc=C:\Users\Michael\AppData\Local\Programs\stack\x86_64-windows\ghc-8.2.2\bin\ghc.EXE --with-ghc-pkg=C:\Users\Michael\AppData\Local\Programs\stack\x86_64-windows\ghc-8.2.2\bin\ghc-pkg.EXE --user --package-db=clear --package-db=global --package-db=C:\sr\snapshotscecb13\pkgdb --package-db=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\pkgdb --libdir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\lib --bindir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\bin --datadir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\share --libexecdir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\libexec --sysconfdir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\etc --docdir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\doc\haskell-project-0.1.0.0 --htmldir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\doc\haskell-project-0.1.0.0 --haddockdir=C:\Users\Michael\Desktop\haskell-project\.stack-work\install\ccbce92a\doc\haskell-project-0.1.0.0 --dependency=base=base-4.10.1.0 --dependency=containers=containers-0.5.10.2 --dependency=mtl=mtl-2.2.1-DscMMmDQUE6GBfOSl4qMUH --dependency=parsec=parsec-3.1.11-3BgBURmbRiVF8fgoxhAiBa --dependency=pretty-simple=pretty-simple-2.0.1.0-J3QTM6x6LHL5fhqavYvVhJ --dependency=text=text-1.2.2.2-9VTsh6V7U7hpagw2HDvpZ --extra-include-dirs=C:\Users\Michael\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw64\include --extra-lib-dirs=C:\Users\Michael\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw64\bin --extra-lib-dirs=C:\Users\Michael\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw64\lib --enable-tests --enable-benchmarks
    Process exited with code: ExitFailure 1

解决此问题或可能原因的步骤是什么?

我设法为遇到相同问题的任何人找到了临时解决方案。

我将 cabal 降级到 1.24.0.2 版并将解析器更改为使用 GHC 8.0.1 版 (resolver: ghc-8.0.1)。

然后 运行 stack solver 我现在可以构建了。

issue #3765 on the stack tracker has some workarounds for this, in addition to .

最好的解决方案似乎是取消设置 __COMPAT_LAYER,当设置为 INSTALLER 时可以重现错误。

C:\>set __COMPAT_LAYER=

原因可能是某些版本的 GHC 中存在错误,该错误捕获了应该传播给用户的异常。如果是这种情况,则存在潜在问题,而此错误正在隐藏它。

请对上述问题添加评论,因为这将有助于维护人员跟踪此问题的普遍性。