プログラムをプロファイリングでコンパイルしたいので、次のコマンドを実行します。
$ 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にそれ自体で作業を行わせるのですか?
library-profiling: True
ファイルで~/.cabal/config
を有効にしました。それ以降、新しいインストールでは自動的にプロファイリングが有効になります。
残念ながら、それでも、すでにインストールされている古いパッケージを手動で再インストールする必要がありました。ただし、これを手動でしばらく行った後、私は今ほとんどのパッケージをプロファイリングを有効にして再インストールしています...
Tom Lokhorstのコメントから:
誰かがより良い答えを持って来ることを願っています。次回、Haskellプラットフォーム全体を手動で再インストールする必要はありません。
将来の訪問者のために:
インストールされているすべてのライブラリのプロファイリングバージョンをインストールするタスクは面倒ではなくなり、cabal (cabal-install)
は、.cabal
ディレクトリのworld
ファイルにそれを使用してインストールされたものを追跡するようになりました。 (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チャネル、メーリングリストの1つ、またはガイダンスについてはこちら。相互に互換性のない一部のパッケージの hackage の新しいバージョンが原因で、一貫したインストールプランが見つからない場合は、これは通常、world
ファイルを編集し、一部のパッケージの許容バージョンを制限することで解決できます。
次に、何もひどく壊れないことを楽観視している場合は、
$ cabal install --reinstall world
gHCがコンパイルに忙しい間、素敵なお茶を飲みましょう。
Daniel Fischerの答えは良さそうですが、何らかの理由で、私の〜/ .cabal/worldライブラリには、直接インストールされたライブラリのエントリのみが含まれ、依存関係は含まれていませんでした。
代わりに、を使用してインストールされているすべてのライブラリのリストをダンプしました
$ ghc-pkg list > list
これにより、システム全体およびローカルにインストールされたライブラリが一覧表示されます。したがって、list
ファイルを編集して、最初の部分(システム全体にインストールされたライブラリを含む)を削除し、/home/<user>/.ghc/...
の後の行のみを残しました。最後に、私は走った
$ cabal install --reinstall $(cat list)
これは私のために働いた。最初に--dry-run
を実行する必要があります。それからお茶を入れに行きます。またはケーキを焼く。
2016年以降の訪問者の場合:ghc-prof
をインストールするだけです
Debian Linuxシステム:
Sudo apt-get install ghc-prof
Arch Linuxシステム:
Sudo pacman -S ghc-prof