Cabal non installando le dipendenze quando ha bisogno di biblioteche profiling?
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?
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