我想用分析编译我的程序,所以我运行:
$ 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独立完成工作,就像对普通图书馆一样吗?
答案 0 :(得分:45)
我在library-profiling: True
文件中启用了~/.cabal/config
。从那时起,任何新安装都将自动启用分析。
不幸的是,这仍然意味着我必须手动重新安装已安装的旧软件包。虽然,经过一段时间的手动操作后,我现在重新安装了大多数软件包并启用了分析...
答案 1 :(得分:30)
Tom Lokhorst的评论:
我希望有人会得到一个更好的答案,一个不需要我下次手动重新安装完整的Haskell平台的答案。
对于未来的访客:
安装所有已安装库的性能分析版本的任务变得不那么繁琐,cabal (cabal-install)
现在跟踪world
目录中.cabal
文件中使用它的安装内容(在Linux上,那将是$HOME/.cabal
,在Windows上类似于C:\Users\%YOU%\AppData\Roaming\cabal\
,在OSX上?)。
因此,在config
文件(在同一目录中)中启用分析后,清除GHC的软件包数据库(您可以找到每ghc-pkg list nonexisting
个全局和用户数据库的位置;删除cabal-使用ghc-pkg unregister packagename
从全局数据库安装包,如果你有,重命名或删除整个用户数据库 - 这是必要的,因为world
文件只跟踪显式安装的包,而不是它们的依赖关系),安装所有包分析支持应该如下工作:
$ cabal install --reinstall world --dry-run
首先运行--dry-run
以在实际重新安装任何内容之前检查问题。如果它会重新安装process
或directory
等启动软件包,那么这是一个不好的信号,如果您不知道如何处理它,请在#haskell
IRC频道上询问其中一个邮件列表,或在这里作为指导。如果由于某些软件包的hackage上的新版本相互不兼容而无法找到一致的安装计划,通常可以通过编辑world
文件并限制某些软件包的允许版本来解决
然后,如果你乐观地认为什么都不会破坏,
$ cabal install --reinstall world
并且在GHC忙于编制的时候喝了一大壶茶。
答案 2 :(得分:15)
Daniel Fischer的回答看起来不错,但出于某种原因,我的〜/ .cabal / world库只包含直接安装库的条目,而不包含它们的依赖项。
相反,我使用
转出了所有已安装库的列表$ ghc-pkg list > list
这列出了系统范围和本地安装的库。因此,我编辑了list
文件以删除第一部分(包含系统安装的库),只留下/home/<user>/.ghc/...
之后的行。最后,我跑了
$ cabal install --reinstall $(cat list)
这对我有用。你应该先做--dry-run
。然后去煮一壶茶。或者烤蛋糕。
答案 3 :(得分:4)
现在似乎没办法:Ticket #282 - profiling versions of libraries not managed well "As usual the problem is lack of devevloper time to implement all these nice features we all want."
答案 4 :(得分:0)
对于访客2016+:只需安装ghc-prof
Debian Linux系统:
sudo apt-get install ghc-prof
Arch Linux Systems:
sudo pacman -S ghc-prof