2011-04-22 4 views
3

PROBLÈME EST RÉSOLU!Vous ne pouvez pas obtenir cabal pour trouver la bibliothèque mpi pour haskell-mpi sur Windows

  1. Suivez les instructions Dons posté here
  2. Ouvrez vos variables d'environnement (Mon ordinateur -> Propriétés (dans le menu contextuel) -> Avancé)
  3. Ajouter ou faire une nouvelle variable d'environnement C_INCLUDE_PATH il pointe vers le répertoire d'inclusion de MPI. Dans mon cas, /c/program files/mpich2/include.
  4. Ajoutez ou créez une nouvelle variable d'environnement LIBRARY_PATH afin qu'elle pointe vers le répertoire lib de MPI. Dans mon cas, /c/program files/mpich2/lib
  5. Cacher libmpi.a en quelque sorte. Si besoin est, vous pouvez résoudre ce problème plus tard. C'est un hack mais vous ne pouvez pas construire haskell-mpi sans le faire car ld échouera. Je l'ai renommé en _libmpi.a

Maintenant, haskell-mpi devrait construire sur windows. Anticipant plus de problèmes sur la ligne, mais il construit, et il a résolu mon problème.


Je suis désireux d'utiliser haskell-mpi sur une machine de laboratoire à l'un de mes laboratoires universitaires pour faire mon projet pour ma classe de calcul parallèle, mais je suis en cours d'exécution en difficulté essayant de construire haskell-mpi contre MPICH2. Haskell-mpi est à peu près complètement non documenté, et creuser à travers leur dépôt git m'a aidé à programmer quelques exemples de programmes dessus, mais n'a rien fait pour m'aider à le configurer sur Windows. Sur mon système Linux personnel, je n'ai eu aucun problème pour configurer et utiliser haskell-mpi contre MPICH2.

Le problème est probablement celui de cabal, de la façon dont MPICH2 est installé, ou avec la configuration cabal de haskell-mpi, d'où le choix des tags.

Je suis ouvert à expérimenter ici pour le dépannage, et en ajoutant plus d'informations au besoin, mais finalement je n'aurai plus accès à ces machines.

J'ai les droits d'administrateur dans le laboratoire où je vais exécuter ceci, donc si le problème est avec l'installation de MPICH2 elle-même, je pourrais en effet le réinstaller.

cabale échoue comme suit lorsque je tente d'installer haskell-mpi:

Resolving dependencies... 
Configuring haskell-mpi-1.0.0... 
cabal: Missing dependency on a foreign library: 
* Missing C library: mpi 
This problem can usually be solved by installing the system package that 
provides this library (you may need the "-dev" version). If the library is 
already installed but in a non-standard location then you can use the flags 
--extra-include-dirs= and --extra-lib-dirs= to specify where it is. 
cabal: Error: some packages failed to install: 
haskell-mpi-1.0.0 failed during the configure step. The exception was: 
ExitFailure 1 

Voici ce que j'ai essayé de donner pour --extra-lib-dirs et --extra-include-dirs:

--extra-lib-dirs="C:\Program Files\MPICH2\lib" 
--extra-include-dirs="C:\Program Files\MPICH2\include" 

J'ai essayé de réorganiser où j'ai mis ces drapeaux, échapper les backlashes, en utilisant le chemin court PROGRA~1 et diverses permutations de ceux-ci. Donc, je ne pense pas que cela va aider. J'ai besoin de savoir ce que la dépendance mpi signifie réellement et comprendre comment je vais le satisfaire afin que cette bibliothèque peut réellement construire.Voici ce qui vit dans les deux dossiers mentionnés ci-dessus en ce moment:

Libs:

Volume in drive C has no label. 
Volume Serial Number is 5406-5C5C 

Directory of C:\Program Files\MPICH2\lib 

04/22/2011 01:20 PM <DIR>   . 
04/22/2011 01:20 PM <DIR>   .. 
01/31/2011 03:59 PM   515,704 cxx.lib 
01/31/2011 04:23 PM   137,434 fmpich2.lib 
01/31/2011 04:25 PM   410,982 fmpich2g.lib 
01/31/2011 04:29 PM   162,690 fmpich2s.lib 
01/31/2011 04:53 PM     0 libfmpich2g.a 
01/31/2011 04:53 PM     0 libmpi.a 
01/31/2011 04:53 PM   215,528 libmpicxx.a 
01/31/2011 04:16 PM   10,618 mpe.lib 
01/31/2011 04:46 PM   135,434 mpi.lib 
       9 File(s)  1,588,390 bytes 
       2 Dir(s) 221,505,835,008 bytes free 

Inclure:

Volume in drive C has no label. 
Volume Serial Number is 5406-5C5C 

Directory of C:\Program Files\MPICH2\include 

02/01/2011 05:38 PM <DIR>   . 
02/01/2011 05:38 PM <DIR>   .. 
11/17/2009 09:46 PM    4,857 clog_commset.h 
11/02/2007 05:50 PM    696 clog_const.h 
01/31/2011 03:50 PM    731 clog_inttypes.h 
11/17/2009 09:46 PM    1,353 clog_uuid.h 
10/21/2010 01:20 PM    355 mpe.h 
11/17/2009 09:46 PM   11,102 mpe_log.h 
11/02/2007 05:50 PM    1,833 mpe_logf.h 
11/17/2009 09:46 PM    1,322 mpe_misc.h 
01/31/2011 03:50 PM   57,128 mpi.h 
01/31/2011 04:23 PM    3,251 mpi.mod 
01/31/2011 03:50 PM   97,267 mpicxx.h 
01/31/2011 03:51 PM   19,051 mpif.h 
01/31/2011 03:50 PM   16,765 mpio.h 
01/31/2011 04:23 PM   13,668 mpi_base.mod 
01/31/2011 04:23 PM   30,866 mpi_constants.mod 
01/31/2011 04:23 PM    7,802 mpi_sizeofs.mod 
       16 File(s)  268,047 bytes 
       2 Dir(s) 221,505,830,912 bytes free 

Y at-il ici qui pourrait être dûment reconnue manquante?

Je suis assez perplexe à ce stade. À peu près n'importe quelle suggestion serait utile.

Sincèrement, Barend. PS: Cela devrait probablement être étiqueté "haskell-mpi", mais je ne suis pas autorisé à faire de nouvelles balises. Je suppose que personne d'autre ne l'utilise vraiment encore.

EDIT: Suite à la suggestion de Dons,

J'ai installé MingGW et MSYS. Après l'exécution de la mise à jour de mingw-get, j'ai utilisé mingw32-get pour récupérer libtools, mingw32-utils et mingw32-binutils. Je définir les variables d'environnement suivantes pour l'ensemble du système en utilisant l'interface graphique de configuration Windows:

LIBRARY_PATH="C:\Program Files\MPICH2\lib" 
C_INCLUDE_PATH="C:\Program Files\MPICH2\include" 

echo $LIBRARY_PATH et echo %LIBRARY_PATH% maintenant à la fois le travail comme prévu, pas de surprise là-bas. Les variables d'environnement sont définies. Faire des progrès.

cabal install haskell-mpi produit toujours la même sortie qu'avant.

joué avec ld depuis longtemps, énorme ... Red Herring

je dû se cacher libmpi.a de ld pour le faire fonctionner, mais haskell-mpi construit maintenant!

Mettre étape par étape les détails en haut.

+1

Pourquoi est-ce trop localisé? Peu importe qu'il soit fermé maintenant car Dents a déjà répondu, mais cela devrait fonctionner pour tous ceux qui veulent utiliser haskell-mpi sur Windows. –

Répondre

2

J'ai besoin de savoir ce que la dépendance mpi signifie en fait

La ligne extra-libraries: mpi signifie que Cabal ajoutera -lmpi aux options de l'éditeur de liens ld. En outre, les outils qui traitent les en-têtes rechercheront dans les chemins d'inclusion. Alors, comment pouvons-nous aider GHC et binutils à trouver cette bibliothèque?

Selon to the wiki, en supposant que vous avez MinGW ou msys,

Si vous devez créer un lien vers C-logiciel, définir une variable d'environnement C_INCLUDE_PATH qui répertorie les répertoires où les fichiers d'en-tête peuvent être trouvés. Pour lier les bibliothèques, vous devez également définir une variable d'environnement LIBRARY_PATH, en listant les répertoires où les fichiers .a et .lib peuvent être trouvés.

Essayez donc de définir les chemins pour inclure le chemin d'accès aux en-têtes et aux bibliothèques.

+0

Cela ne s'est pas avéré être la solution pour moi, mais il s'est avéré être la plupart du temps et m'a mis sur le chemin de découvrir le reste. J'ai dû renommer un seul fichier avant que les choses ne se construisent réellement. Merci beaucoup. –

Questions connexes