我最近制作了一个cabal包,可以看到here 它由一个库和一些使用它的小例子程序组成。一切都按照预期建立和运作。
我想在一个使用这个库的新软件包中构建一个可执行文件,但是我仍然遇到一个我无法破译的链接错误:
/my/path/RandomAgent/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/rlglue-0.2.1.1/libHSrlglue-0.2.1.1.a(Agent.o):(.text+0x34f1): undefined reference to `rlgluezm0zi2zi1zi1_Pathszurlglue_version1_closure'
collect2:错误:ld返回1退出状态 为了简化诊断,我将其中一个示例程序移动到我的新程序包中,发现它甚至不能正确构建。您可以找到该可执行文件的here版本。
由此我得出的结论是,问题很可能出现在我的.cabal文件中,但是我无法看清楚是什么问题。该错误似乎也指代了cabal为第一个包自动生成的Paths_rlglue模块。
任何人都可以帮助我理解为什么我会收到此错误吗?
答案 0 :(得分:5)
您需要在exposed-modules或其他模块中包含Paths_rlglue模块,例如项目中的任何其他模块,以便Cabal将其链接。
Cabal应该更好地告诉你发生了什么,请参阅https://github.com/haskell/cabal/issues/1746。
答案 1 :(得分:2)
看起来我错过了Paths_pkgname
的文档中的内容如果您决定导入Paths_pkgname模块,那么它必须是 在other-modules字段中列出,就像你的其他任何模块一样 封装
将Paths_rlglue添加到我的库的其他模块中解决了这个问题。希望这可以节省一些人,因为我失去了这个。