Domanda

Voglio compilare il mio programma con profilatura, quindi corro:

$ 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'?
...

Quindi, il problema è, che a differenza di comportamento abituale di benvenuto di cabala, cabala non risolve le dipendenze e installarli quando ha bisogno di librerie di profilazione.

posso lavorare intorno ad esso, risolvendo le dipendenze manualmente (seguendo gli errori che compaiono dopo un po 'di compilazione):

$ 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

E poi ripetere per il mio prossimo dipendenza ..

C'è un modo migliore per fare questo? cioè fanno cabala fare il lavoro da solo come fa per le librerie normali?

È stato utile?

Soluzione

Io ho abilitato library-profiling: True nel mio file ~/.cabal/config. Da quel momento in poi, tutte le nuove installazioni permetteranno automaticamente il profiling.

Purtroppo questo significa ancora ho dovuto reinstallare manualmente per i vecchi pacchetti già installati. Anche se, dopo un po 'di fare questa operazione manualmente, I oggi sono la maggior parte dei pacchetti reinstallato con profiling abilitato ...

Altri suggerimenti

Da un commento di Tom Lokhorst:

  

Mi auguro che qualcuno verrà con una risposta migliore, uno che non mi avrebbe richiesto di reinstallare il piattaforma completa Haskell manualmente la prossima volta.

Per i visitatori futuri:

Il compito di installare le versioni di profilazione di tutte le librerie installate è diventato meno di un lavoro di routine, cabal (cabal-install) ora tiene traccia di ciò che è stato installato utilizzando nel file world nella directory .cabal (su Linux, che sarebbe $HOME/.cabal, su Windows qualcosa come C:\Users\%YOU%\AppData\Roaming\cabal\, su OSX ??).

Così, dopo aver abilitato il profiling nel file config (nella stessa directory), e di compensazione database dei pacchetti di GHC (si possono trovare le posizioni del DB globale e utente per ghc-pkg list nonexisting; rimuovere i pacchetti cabala-installato dal database globale con ghc-pkg unregister packagename se avete qualsiasi, rinominare o eliminare l'intero db utente - questo è necessario perché il file world traccia solo pacchetti installati in modo esplicito, non le loro dipendenze), l'installazione di tutto con il supporto di profilatura dovrebbe funzionare come segue:

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

Per prima corsa con --dry-run per verificare la presenza di problemi prima di poter realmente reinstallare nulla. Se dovesse reinstallare pacchetti di avvio come process o directory, questo è un brutto segno, se non si sa come gestirlo, chiedere sul canale IRC #haskell, una delle mailing list, o qui per la guida. Se non riesce a trovare un coerente piano di installazione a causa di nuove versioni su hackage di alcuni pacchetti che sono incompatibili tra loro, che di solito può essere risolti modificando il file world e vincolare le versioni ammissibili di alcuni pacchetti.

Quindi, se si è ottimista sul fatto che nulla sarà male romperà,

$ cabal install --reinstall world

e hanno una bella tazza di tè mentre GHC è occupato compilazione.

La risposta di Daniel Fischer sembra buono, ma per qualche motivo il mio / library ~ .cabal / mondo solo conteneva le voci per le librerie installate direttamente, e non le loro dipendenze.

Invece, ho buttato fuori un elenco di tutte le librerie installate utilizzando

$ ghc-pkg list > list

Questo elenca le librerie e localmente a livello di sistema installati. Pertanto, ho modificato il file list per rimuovere la prima parte (che contiene le librerie a livello di sistema installati) lasciando solo le righe dopo /home/<user>/.ghc/.... Infine, mi sono imbattuto

$ cabal install --reinstall $(cat list) 

Questo ha funzionato per me. Si dovrebbe forse fare --dry-run prima. Poi andare a fare una tazza di tè. O cuocere una torta.

Per i visitatori 2016+: Basta installare ghc-prof

  

Debian Linux Systems:

     

sudo apt-get install ghc-prof

     

Arch Linux Systems:

     

sudo pacman -S ghc-prof

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top