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 Platform を手動で再インストールする必要のない、より良い答えを誰かが見つけてくれることを願っています。

将来の訪問者のために:

インストールされているすべてのライブラリのプロファイリング バージョンをインストールするタスクは、それほど面倒ではなくなりました。ディレクトリ内のファイルで、cabal (cabal-install)それを使用してインストールされたものを追跡できるようになりました (Linux では、Windows では、OSX では ??)。 .world.cabal$HOME/.cabalC:\Users\%YOU%\AppData\Roaming\cabal\

そのため、ファイル (同じディレクトリ内) でプロファイリングを有効にし、GHCconfigのパッケージ データベースをクリアした後 (グローバル データベースとユーザー データベースの場所をghc-pkg list nonexisting.ghc-pkg unregister packagenameまたは、ユーザー データベース全体を削除します。これは、worldファイルが明示的にインストールされたパッケージのみを追跡し、依存関係を追跡しないため必要です)。プロファイリング サポートを使用してすべてをインストールすると、次のように動作するはずです。

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

--dry-run実際に何かを再インストールする前に、最初に実行して問題を確認してください。processまたはのようなブート パッケージを再インストールする場合、それはdirectory悪い兆候です。対処方法がわからない場合は、#haskellIRC チャンネル、メーリング リストの 1 つ、またはこちらでガイダンスを求めてください。互いに互換性のないいくつかのパッケージのハックに関する新しいバージョンが原因で一貫したインストール プランを見つけられない場合、通常はworldファイルを編集し、いくつかのパッケージの許容バージョンを制限することで解決できます。

次に、何もひどく壊れないだろうと楽観的であれば、

$ cabal install --reinstall world

GHC がコンパイルに忙しい間、おいしいお茶を飲みましょう。

于 2012-01-31T20:02:56.423 に答える
16

ダニエル・フィッシャーの答えは良さそうですが、何らかの理由で私の ~/.cabal/world ライブラリには、直接インストールされたライブラリのエントリのみが含まれ、依存関係は含まれていませんでした。

代わりに、インストールされているすべてのライブラリのリストを

$ ghc-pkg list > list

これにより、システム全体およびローカルにインストールされたライブラリが一覧表示されます。そのため、listファイルを編集して最初の部分 (システム全体にインストールされたライブラリを含む) を削除し、 の後の行のみを残しました/home/<user>/.ghc/...。最後に、私は走った

$ cabal install --reinstall $(cat list) 

これは私にとってはうまくいきました。あなたは多分--dry-run最初にすべきです。それからお茶を作りに行きます。またはケーキを焼きます。

于 2012-05-01T12:24:45.780 に答える