yai*_*chu 44 profiling haskell cabal
我想用分析编译我的程序,所以我运行:
$ 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'?
...
Run Code Online (Sandbox Code Playgroud)
因此,问题是,与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
Run Code Online (Sandbox Code Playgroud)
然后重复我的下一个依赖..
有一个更好的方法吗?也就是说,让cabal像普通图书馆一样自己做工作?
Tom*_*rst 45
我library-profiling: True在我的~/.cabal/config文件中启用了.从那时起,任何新安装都将自动启用分析.
不幸的是,这仍然意味着我必须为已安装的旧软件包手动重新安装.虽然,经过一段时间的手动操作,我现在已经重新安装了大多数软件包并启用了分析...
Dan*_*her 30
来自Tom Lokhorst的评论:
我希望有人会得到一个更好的答案,一个不需要我下次手动重新安装完整的Haskell平台的答案.
对于未来的访客:
安装所有已安装库的性能分析版本的任务变得不那么繁琐,cabal (cabal-install)现在跟踪world在.cabal目录中的文件中使用它安装的内容(在Linux上$HOME/.cabal,在Windows上,就像C:\Users\%YOU%\AppData\Roaming\cabal\在OSX 上那样) .
因此,在config文件中启用分析(在同一目录中)并清除GHC的软件包数据库(您可以找到全局和用户db的位置ghc-pkg list nonexisting;从全局数据库中删除cabal安装的软件包,ghc-pkg unregister packagename如果有的话,请重命名或删除整个用户数据库 - 这是必要的,因为该world文件只跟踪显式安装的包,而不是它们的依赖项),安装具有性能分析支持的所有内容应该如下工作:
$ cabal install --reinstall world --dry-run
Run Code Online (Sandbox Code Playgroud)
首先运行以--dry-run在实际重新安装任何内容之前检查问题.如果它会重新安装启动软件包,process或者directory,这是一个不好的标志,如果您不知道如何处理它,请在#haskellIRC频道,其中一个邮件列表或此处寻求指导.如果由于某些软件包的hackage上的新版本彼此不兼容而无法找到一致的安装计划,通常可以通过编辑world文件并限制某些软件包的允许版本来解决.
然后,如果你乐观地认为什么都不会破坏,
$ cabal install --reinstall world
Run Code Online (Sandbox Code Playgroud)
GHC忙于编制时,喝一壶好茶.
Ben*_*rne 15
Daniel Fischer的答案看起来不错,但出于某种原因,我的〜/ .cabal/world库只包含直接安装的库的条目,而不包含它们的依赖项.
相反,我使用了转储所有已安装库的列表
$ ghc-pkg list > list
Run Code Online (Sandbox Code Playgroud)
这列出了系统范围和本地安装的库.因此,我编辑了list文件以删除第一部分(包含系统安装的库),只留下后面的行/home/<user>/.ghc/....最后,我跑了
$ cabal install --reinstall $(cat list)
Run Code Online (Sandbox Code Playgroud)
这对我有用.你应该先做--dry-run.然后去煮一壶茶.或者烤蛋糕.
| 归档时间: |
|
| 查看次数: |
10474 次 |
| 最近记录: |