44 votes

La Cabale n’installe-t-elle pas de dépendances lorsqu’elle a besoin de bibliothèques de profilage?

Je veux compiler mon programme avec le profilage, donc, je lance:

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

Donc, le problème, c'est que contrairement à la cabale de bienvenue habituel comportement, de la cabale ne permet pas de résoudre les dépendances et les installer lorsqu'il est nécessaire de profilage des bibliothèques.

Je peux le contourner en résoudre les dépendances à la main (par la suite les erreurs qui apparaissent après un certain temps de compilation):

$ 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

Et puis répétez l'opération pour mon prochain dépendance..

Est-il une meilleure façon de le faire? j'.e fais de la cabale faire le travail lui-même comme il le fait normale pour les bibliothèques?

45voto

Tom Lokhorst Points 7733

J'ai activé library-profiling: True dans mon fichier ~/.cabal/config . Dès lors, toute nouvelle installation activera automatiquement le profilage.

Malheureusement, cela signifie toujours que je devais réinstaller manuellement les anciens packages déjà installés. Bien que, après un certain temps de le faire, j'ai maintenant manuellement la plupart des paquets avec le profilage réinstallées ... permis

30voto

Daniel Fischer Points 114146

À partir d'un commentaire par Tom Lokhorst:

J'espère que quelqu'un va venir avec une meilleure réponse, une réponse qui ne serait pas m'obliger à réinstaller le complet Haskell Platform manuellement la prochaine fois.

Pour les futurs visiteurs:

La tâche de l'installation de profilage des versions de toutes les bibliothèques installées est devenu moins d'une corvée, cabal (cabal-install) maintenant garde la trace de ce qui a été installé à l'aide dans l' world le fichier dans l' .cabal répertoire (sur linux, ce serait l' $HOME/.cabal, sur Windows quelque chose comme C:\Users\%YOU%\AppData\Roaming\cabal\, sur OSX ??).

Ainsi, après l'activation du profilage config le fichier (dans le même répertoire), et la compensation de GHC du package de base de données (vous pouvez trouver l'emplacement de la mondiale et base de données utilisateur par ghc-pkg list nonexisting; suppression de la cabale installé les packages à partir de la base de données mondiale avec ghc-pkg unregister packagename si vous en avez, renommer ou supprimer l'intégralité de l'utilisateur, db - cela est nécessaire parce que l' world fichier seulement des pistes explicitement les paquets installés, pas leurs dépendances), tout installer avec le profilage de soutien doit fonctionner comme suit:

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

Première descente --dry-run pour vérifier les problèmes avant de réinstaller quoi que ce soit. Si elle permettrait de réinstaller les paquets de démarrage comme process ou directory, c'est un mauvais signe, si vous ne savez pas comment le gérer, de le demander à l' #haskell canal IRC, une des listes de diffusion, ou ici pour obtenir des conseils. Si elle ne parvient pas à trouver une cohérence d'installer le plan grâce à de nouvelles versions sur le hackage de certains paquets qui sont incompatibles les uns avec les autres, qui peut généralement être résolu par l'édition de l' world le fichier et en limitant l'admissibles versions de certains paquets.

Alors, si vous êtes optimiste que rien ne va mal pause,

$ cabal install --reinstall world

et avoir une belle tasse de thé tout en GHC est occupé de la compilation.

16voto

Ben Blackburne Points 111

Daniel Fischer réponse semble bon, mais pour une raison quelconque, mon ~/.cabale mondiale de la bibliothèque ne contient que des entrées pour les bibliothèques installées directement, et non pas de leurs dépendances.

Au lieu de cela, j'ai perdu la liste de toutes les bibliothèques installées à l'aide de

$ ghc-pkg list > list

Voici la liste des bibliothèques installées à l'échelle du système et localement. Donc, j'ai édité list le fichier à supprimer la première partie (contenant les bibliothèques installées à l'échelle du système) en laissant seulement les lignes qui suivent /home/<user>/.ghc/.... Enfin, j'ai couru

$ cabal install --reinstall $(cat list) 

Cela a fonctionné pour moi. Vous devriez peut-être avez - --dry-run première. Puis allez faire un pot de thé. Ou cuire un gâteau.

4voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X