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

Haskell项目链接错误:Adapter.PostgreSQL.Auth符号未定义

解决Haskell项目practical-web-dev-ghc的链接错误问题

问题根源

你遇到的ld.bfd未定义符号错误,核心原因是:虽然Adapter.PostgreSQL.Auth模块已被编译,但它没有被加入cabal文件library段的exposed-modules或other-modules列表中。cabal只会将这两个列表中的模块目标文件纳入链接环节,未声明的模块即使编译了也不会参与链接,导致符号找不到。

解决方案

1. 修改cabal配置文件

打开项目的.cabal文件,找到library配置块,将Adapter.PostgreSQL.Auth添加到other-modules(如果该模块仅被library内部调用,无需对外暴露)或exposed-modules(如果需要给项目的executable或其他组件提供接口)中:

错误配置示例:

library
  exposed-modules:      Lib
  other-modules:        Adapter.PostgreSQL.Users
  hs-source-dirs:       src
  -- 其他依赖、编译选项等配置

正确配置示例(选择其中一种即可):

library
  exposed-modules:      Lib
                        Adapter.PostgreSQL.Auth  -- 需对外暴露时添加
  other-modules:        Adapter.PostgreSQL.Users
  hs-source-dirs:       src
  -- 其他配置...

或者

library
  exposed-modules:      Lib
  other-modules:        Adapter.PostgreSQL.Users
                        Adapter.PostgreSQL.Auth  -- 仅内部调用时添加
  hs-source-dirs:       src
  -- 其他配置...

2. 重新构建项目

执行以下命令重新构建,链接错误即可解决:

cabal build

额外注意事项

  • 确保模块文件路径与模块名匹配:Adapter.PostgreSQL.Auth对应的文件路径应为src/Adapter/PostgreSQL/Auth.hs,且cabal的hs-source-dirs包含src目录。
  • 如果该模块是被项目的executable直接调用,除了在library中声明,还要确保executable的build-depends包含当前library。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:12:10