能否在Linux环境下交叉编译Haskell程序适配Windows平台?
完全可以在Linux上交叉编译出能直接在Windows运行的Haskell可执行文件,以下是具体操作步骤和注意事项:
安装Windows交叉编译工具链
GHCup支持安装针对Windows的交叉编译版本GHC,先确认可用的目标架构:ghcup list ghc找到对应Windows的目标(如
x86_64-w64-mingw32),安装并设置为该目标的默认编译器:ghcup install ghc --target x86_64-w64-mingw32 ghcup set ghc --target x86_64-w64-mingw32同时需要安装系统级的mingw交叉编译依赖,以Debian/Ubuntu为例:
sudo apt install gcc-mingw-w64-x86-64 libc6-dev-i386-cross用Cabal交叉编译项目
可通过命令行参数直接指定交叉编译器:cabal build --compiler=ghc-x86_64-w64-mingw32也可以在项目根目录创建
cabal.project文件,配置默认交叉编译目标:package * compiler: ghc-x86_64-w64-mingw32之后直接运行
cabal build即可。处理
System.Console.ANSI的兼容性
该库已原生支持Windows平台,交叉编译时会自动适配Windows终端API,无需修改现有代码。建议确保依赖的ansi-terminal(System.Console.ANSI所属包)版本为最新,避免旧版本兼容性问题。生成独立可执行文件
为让Windows端无需额外依赖即可运行,需编译静态链接的可执行文件。在Cabal命令中添加静态链接参数:cabal build --compiler=ghc-x86_64-w64-mingw32 --enable-executable-static或者在
.cabal项目文件的可执行项中添加:executable your-program-name ... executable-static: True验证编译产物
编译完成后,.exe格式的可执行文件会生成在dist-newstyle/build/x86_64-w64-mingw32/下的对应子目录中。用file命令确认其格式:file path/to/your-program.exe输出应显示为
PE32+ executable (console) x86-64, for MS Windows类内容。
内容的提问来源于stack exchange,提问作者Enlico

