Windows下用Haskell Stack构建Hello-World遇gcc编译错误
解决Windows 11下Stack编译Haskell时GCC失败的问题
以下是针对_fread_nolock_s相关编译错误的具体解决步骤:
确认Visual Studio 2019组件完整
打开VS Installer,勾选「Desktop development with C++」工作负载,确保包含以下组件:- MSVC v142 - VS 2019 C++ x64/x86 build tools
- 对应Windows 11版本的Windows SDK
- C++ ATL for latest v142 build tools
安装完成后重启系统。
强制Stack使用MSVC工具链
在用户目录(C:\Users\<你的用户名>)下创建或修改stack.yaml全局配置,添加内容:compiler: ghc-9.2.7 setup-info: ghc: windows: x86_64: url: "https://downloads.haskell.org/~ghc/9.2.7/ghc-9.2.7-x86_64-unknown-mingw32.tar.xz" bindist-type: "mingw" system-ghc: false msbuild-path: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\MSBuild\\Current\\Bin\\MSBuild.exe"也可以在项目目录的
stack.yaml中添加system-ghc: false和指定msbuild-path,仅对当前项目生效。修复环境变量与头文件冲突
- 检查系统PATH,确保VS工具链的路径优先级高于其他GCC/MinGW版本,暂时移除冲突的GCC路径后重试。
- 打开「Developer Command Prompt for VS 2019」,在该命令行窗口中执行
stack build,确保使用VS的编译环境。 - 若仍有头文件问题,在项目
stack.yaml中添加指定路径(替换为你实际安装的版本号):extra-include-dirs: - "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\include" - "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt" extra-lib-dirs: - "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\lib\\x64" - "C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.22621.0\\ucrt\\x64"
升级工具版本
- 执行
stack upgrade升级到最新Stack版本,再重新编译项目。 - 更换GHC resolver版本,比如在项目
stack.yaml中设置resolver: lts-20.25(对应GHC 9.2.8,修复部分Windows编译兼容问题),然后执行stack build。
- 执行
内容的提问来源于stack exchange,提问作者quarks
相关产品推荐
相关产品推荐

