我正在尝试使用以下命令在启用了分析的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
阴谋集团一直给我警告,关于可能通过重新安装破坏软件包,但我坚持(据我所知(每个可能被破坏的软件包都会在我通过依赖树时自行重新安装。 此外,我之前在另一台机器上遵循了相同的过程,并且工作正常。 重新安装所有必需的包后,我的项目现在可以编译,但链接器失败并显示此错误:
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 v2-build
来编译您的程序。它会警告您缺少程序的依赖项,直到将它们全部包含在 .cabal 文件的build-depends
部分中。您只需要包含程序的依赖项,而不需要包含依赖项的依赖项。之后,您可以添加cabal.project.local
以启用分析以及其他内容。运行cabal v2-build
来构建它所依赖的程序和包就足够了,并且启用了分析(以及 cabal.project.local 中的其他选项(。
您需要在程序使用的包中启用分析,以支持其中的分析。Cabal v2 构建允许你拥有同一包的多个实例。这些实例是不同的,因为使用了不同的标志和选项来构建它们。
使用程序的单独包数据库可以实现相同的结果。那就是使用带有--package-db
选项的ghc-pkg。
另一种选择是使用堆栈。它将解决相同的问题,但以更多的空间和ghc中的一些性能损失为代价(与可以从源代码构建的ghc相比,它可以与阴谋集团一起使用(。