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
相关产品推荐
相关产品推荐

