[英]GHC linker cannot find lHSsemigroups
我正在尝试使用以下命令在启用分析的 Windows 上编译 Haskell 项目。
ghc --make -O -prof -fprof-auto game_dangerous.hs
我自己开发了这个项目,并且在没有分析的情况下编译和链接了相同的源代码。 正如预期的那样(根据以前的经验),我遇到了许多形式的错误:
Could not find module `Data.Vector.Mutable'
Perhaps you haven't installed the profiling libraries for package `vector-0.12.0.2'?
我继续根据遇到的错误反复重新安装软件包,例如:
cabal install -p vector --reinstall
Cabal 不断警告我可能会因重新安装而破坏软件包,但我一直坚持下去,因为(就我所见)每个可能被破坏的软件包都将在我遍历依赖关系树时自行重新安装。 另外,我之前在另一台机器上遵循了相同的过程,并且运行良好。 重新安装所有必需的包后,我的项目现在可以编译,但链接器因以下错误而失败:
C://Program Files//Haskell Platform//8.6.3//mingw//bin/ld.exe: cannot find -lHSsemigroups-0.18.5-8pPnWqWrcWhEagTFf5Pnk2_p
collect2.exe: error: ld returned 1 exit status
`gcc.exe' failed in phase `Linker'. (Exit code: 1)
但是,在未启用分析的情况下,构建确实成功完成。 有谁知道可能出了什么问题以及如何解决问题? 提前致谢。
史蒂文
我会尝试为您的程序制作一个 .cabal 文件,您可以在其中明确指定您的程序所依赖的 cabal 包并使用cabal v2-build
来编译您的程序。 它会警告您程序缺少依赖项,直到您将它们全部包含在 .cabal 文件的build-depends
部分。 您只需要包含程序的依赖项,而不是依赖项的依赖项。 之后,您可以添加cabal.project.local
以启用分析或其他内容。 在启用分析(以及 cabal.project.local 中的其他选项)的情况下,运行cabal v2-build
来构建它所依赖的程序和包应该就足够了。
您需要在程序使用的包中启用分析以支持其中的分析。 Cabal v2 构建允许您拥有同一个包的多个实例。 这些实例是不同的,因为构建它们时使用了不同的标志和选项。
可以为您的程序使用单独的包数据库来获得相同的结果。 那是将 ghc-pkg 与--package-db
选项一起使用。
另一种选择是使用堆栈。 它将解决相同的问题,但不同的是在 ghc 中以更多空间和一些性能损失为代价(与从源代码构建的 ghc 相比,可以与 cabal 一起使用)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.