46

我想用分析编译我的程序,所以我运行:

$ cabal configure --enable-executable-profiling
...
$ cabal build
...
    Could not find module 'Graphics.UI.GLUT':
      Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'?
...
$ # indeed I have not installed the prof libs for GLUT, so..
$ cabal install -p GLUT --reinstall
...
    Could not find module 'Graphics.Rendering.OpenGL':
      Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'?
...

所以,问题是,与 cabal 通常的欢迎行为不同,cabal 不会解决依赖关系并在需要分析库时安装它们。

我可以通过手动解决依赖关系来解决它(通过遵循编译一段时间后出现的错误):

$ cabal install -p OpenGLRaw --reinstall
$ cabal install -p StateVar --reinstall
$ cabal install -p Tensor --reinstall
$ cabal install -p ObjectName --reinstall
$ cabal install -p GLURaw --reinstall
$ cabal install -p OpenGL --reinstall
$ cabal install -p GLUT --reinstall

然后重复我的下一个依赖项..

有一个更好的方法吗?即是否让 cabal 像普通图书馆一样独立完成工作?

4

5 回答 5

45

我已经library-profiling: True在我的~/.cabal/config文件中启用了。从那时起,任何新安装都将自动启用分析。

不幸的是,这仍然意味着我必须手动重新安装已经安装的旧软件包。虽然,经过一段时间的手动操作,我现在重新安装了大多数软件包并启用了分析...

于 2009-11-10T17:41:02.640 回答
30

来自 Tom Lokhorst 的评论:

我确实希望有人能提供一个更好的答案,下次不需要我手动重新安装完整的 Haskell 平台。

对于未来的访客:

安装所有已安装库的分析版本的任务已经变得不那么繁琐了,现在可以在目录中的文件中cabal (cabal-install)跟踪使用它安装的内容(在 linux 上,这将是,在 Windows 上类似,在 OSX 上??) .world.cabal$HOME/.cabalC:\Users\%YOU%\AppData\Roaming\cabal\

因此,在config文件中启用分析后(在同一目录中),并清除 GHC 的包数据库(您可以找到全局和用户 db per 的位置ghc-pkg list nonexisting;从全局数据库中删除 cabal 安装的包,ghc-pkg unregister packagename如果有的话,重命名或删除整个用户 db - 这是必要的,因为该world文件仅跟踪显式安装的包,而不是它们的依赖项),安装具有分析支持的所有内容应按如下方式工作:

$ cabal install --reinstall world --dry-run

在实际重新安装任何东西之前首先运行--dry-run以检查问题。如果它会重新安装类似processor的引导包directory,这是一个不好的迹象,如果您不知道如何处理它,请在#haskellIRC 频道、邮件列表之一或此处寻求指导。如果由于一些相互不兼容的软件包的新版本被破解而无法找到一致的安装计划,通常可以通过编辑文件world限制某些软件包的允许版本来解决。

那么,如果你乐观地认为没有什么会严重破坏,

$ cabal install --reinstall world

在 GHC 忙着编译的时候喝上一壶好茶。

于 2012-01-31T20:02:56.423 回答
16

Daniel Fischer 的回答看起来不错,但由于某种原因,我的 ~/.cabal/world 库仅包含直接安装的库的条目,而不包含它们的依赖项。

相反,我使用

$ ghc-pkg list > list

这列出了系统范围和本地安装的库。因此,我编辑了list文件以删除第一部分(包含在系统范围内安装的库),只留下/home/<user>/.ghc/.... 最后,我跑了

$ cabal install --reinstall $(cat list) 

这对我有用。你也许应该先做--dry-run。然后去泡一壶茶。或者烤蛋糕。

于 2012-05-01T12:24:45.780 回答
0

对于 2016 年以上的访客:只需安装ghc-prof

Debian Linux 系统:

sudo apt-get install ghc-prof

Arch Linux 系统:

sudo pacman -S ghc-prof

于 2016-08-11T16:16:13.100 回答