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

M1芯片Mac构建含persistent-postgresql的Haskell项目失败如何解决

问题原因

你遇到的符号找不到错误核心是架构不匹配导致的:M1芯片Mac上brew默认安装的PostgreSQL 13是arm64架构,而你使用的nightly-2021-09-02版本resolver默认运行在x86_64转译环境下,编译postgresql-libpq时链接的库架构不一致,最终加载动态库时找不到_PQclear等原生符号。

解决方案(推荐原生arm64架构方案)

  • 首先切换到未开启Rosetta转译的原生终端,执行arch命令确认输出为arm64
  • 清除之前的x86架构构建缓存:
stack clean --full
  • 替换stack.yaml中的resolver为对M1兼容性更好的LTS版本,对应GHC 9.0.x,完全兼容你现有代码的derivePersistField语法:
resolver: lts-19.33
  • 在stack.yaml末尾添加brew安装的PostgreSQL 13的头文件和库路径,避免编译时找不到依赖:
extra-include-dirs:
  - /opt/homebrew/opt/postgresql@13/include
extra-lib-dirs:
  - /opt/homebrew/opt/postgresql@13/lib
  • 先单独重编译PostgreSQL相关依赖,再整体构建项目:
stack build postgresql-libpq --force-dirty
stack build

可选方案(保留Rosetta转译环境)

如果你必须使用x86_64架构的stack环境,按以下步骤操作:

  • 右键点击终端应用,选择「显示简介」,勾选「使用Rosetta打开」后重启终端
  • 安装x86架构版本的Homebrew:
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • 使用x86版本brew安装PostgreSQL 13:
arch -x86_64 /usr/local/bin/brew install postgresql@13
  • 在stack.yaml中指定x86版本PostgreSQL的依赖路径:
extra-include-dirs:
  - /usr/local/opt/postgresql@13/include
extra-lib-dirs:
  - /usr/local/opt/postgresql@13/lib
  • 执行stack build即可完成构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:48:04