GHC 链接器错误(堆栈)
GHC Linker error (stack)
我是 Haskell 的初学者,我正在尝试 stack 构建应用程序。
但是,stack build
在执行时给我 linker 错误:
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/sim-exe/sim-exe ...
[...]/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/libHSsim-0.1.0.0-EmdGqYS9bXF9VefempSPEG.a(Lib.o):(.text+0x98f5): undefined reference to `simzuEmdGqYS9bXF9VefempSPEG_Linter_lint_info'
[...]/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/libHSsim-0.1.0.0-EmdGqYS9bXF9VefempSPEG.a(Lib.o):(.data+0x5f0): undefined reference to `simzuEmdGqYS9bXF9VefempSPEG_Linter_lint_closure'
collect2: error: ld returned 1 exit status
查看标签告诉我它与此函数中的闭包有关:
lint :: String -> [LintError]
lint source = let
handleParseError :: ParseError -> [LintError]
handleParseError e = [LintError (fromSourcePos $ errorPos e) $ format e]
in
case parseSim source of
(Left error) -> handleParseError error
(Right prog) -> lintProgram prog
但是里面真的没有闭包吗?如果我用
替换 lint
的实现
lint _ = []
编译正常。
我可以执行 stack ghci
并尝试完整的 lint
实现。为什么无法 link?
正如 yuras 正确指出的那样,在 cabal 文件中的 exposed-modules
下添加模块可以解决问题。
我是 Haskell 的初学者,我正在尝试 stack 构建应用程序。
但是,stack build
在执行时给我 linker 错误:
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/sim-exe/sim-exe ...
[...]/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/libHSsim-0.1.0.0-EmdGqYS9bXF9VefempSPEG.a(Lib.o):(.text+0x98f5): undefined reference to `simzuEmdGqYS9bXF9VefempSPEG_Linter_lint_info'
[...]/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/libHSsim-0.1.0.0-EmdGqYS9bXF9VefempSPEG.a(Lib.o):(.data+0x5f0): undefined reference to `simzuEmdGqYS9bXF9VefempSPEG_Linter_lint_closure'
collect2: error: ld returned 1 exit status
查看标签告诉我它与此函数中的闭包有关:
lint :: String -> [LintError]
lint source = let
handleParseError :: ParseError -> [LintError]
handleParseError e = [LintError (fromSourcePos $ errorPos e) $ format e]
in
case parseSim source of
(Left error) -> handleParseError error
(Right prog) -> lintProgram prog
但是里面真的没有闭包吗?如果我用
替换lint
的实现
lint _ = []
编译正常。
我可以执行 stack ghci
并尝试完整的 lint
实现。为什么无法 link?
正如 yuras 正确指出的那样,在 cabal 文件中的 exposed-modules
下添加模块可以解决问题。