You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在x86_64机器上交叉编译Yesod应用至aarch64系统的问题咨询

解决x86_64机器交叉编译Yesod应用到aarch64并生成Keter包的方法

方案1:Docker交叉编译(最省心的方式)

直接用Docker多架构构建功能,在容器内完成aarch64架构的编译,不用折腾本地交叉编译工具链:

  • 先确保你的Docker已开启buildx功能(首次执行docker buildx create --use初始化)
  • 拉取aarch64架构的Ubuntu镜像,挂载本地Yesod项目目录进入容器:
    docker run --rm -it -v /你的项目本地路径:/project arm64v8/ubuntu:latest
    
  • 在容器内安装依赖和工具:
    apt update && apt install -y curl git gcc g++ libffi-dev libgmp-dev zlib1g-dev
    curl -sSL https://get.haskellstack.org/ | sh
    stack install yesod-bin keter
    
  • 进入项目目录生成适配aarch64的Keter包:
    cd /project
    yesod keter
    

生成的.keter包会在/project/dist下,直接复制到本地再上传到目标服务器即可。

方案2:手动配置Stack交叉编译工具链

如果不想用Docker,可手动配置交叉编译环境:

  • 在x86_64 Debian上安装aarch64交叉编译工具链:
    apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
    
  • 修改stack.yaml,添加Docker交叉编译配置(避免直接下载aarch64版GHC):
    resolver: lts-20.x  # 替换为你当前使用的resolver版本
    docker:
      enable: true
      image: "fpco/stack-build:lts-20.x"  # 镜像版本要和resolver对应
      platforms: ["linux/aarch64"]
    
  • 用Stack编译项目并生成Keter包:
    stack build --docker
    stack exec yesod keter
    

额外注意点

  • 确保目标服务器的Keter版本和生成包时使用的版本兼容
  • 生成Keter包前,确认项目的静态资源、配置文件都已正确纳入打包范围,避免部署后缺失文件

内容的提问来源于stack exchange,提问作者Shini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:08:14