Kan ikke få kabal til at finde mpi biblioteket for haskell-mpi på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



PROBLEMET ER LØSET!



  1. Følg instruktionerne Dons, der er indsendt her

  2. Åbn dine miljøvariabler (Min computer -> Egenskaber (i kontekstmenuen) -> Avanceret)

  3. Tilføj til eller lav en ny miljøvariabel C\_INCLUDE\_PATH, så det peger på MPI'er indeholder mappe. I mit tilfælde /c/program files/mpich2/include.

  4. Tilføj til eller lav en ny miljøvariabel LIBRARY\_PATH, så det peger på MPIs bibliotek. I mit tilfælde /c/program files/mpich2/lib

  5. Skjul libmpi.a på en eller anden måde. Hvis det er nødvendigt, kan du rette det senere. Det er et hack, men du kan ikke bygge haskell-mpi uden at gøre det, fordi ld vil mislykkes. Jeg omdøbte det til \_libmpi.a



Nu skal haskell-mpi bygge på vinduer. Forvente flere problemer ned ad linjen, men det blev bygget, og det løste mit problem. [17]





Jeg vil bruge haskell-mpi på et laboratorium på et af mine universitetslaboratorier til at gøre mit sidste projekt til min parallel computerklasse, men jeg løber i problemer med at forsøge at få haskell-mpi til at bygge mod MPICH2.


haskell-mpi er stort set helt ukendt, og grave gennem deres git repository har hjulpet mig med at programmere nogle eksempler programmer på det, men har ikke gjort noget for at hjælpe mig med at sætte det op på Windows. På mit personlige Linux-system havde jeg ingen problemer med at oprette og køre haskell-mpi mod MPICH2.


Problemet er sandsynligvis i et af kabalerne, den måde, MPICH2 er installeret på, eller med haskell-mpi's kabalkonfiguration, og dermed valg af tags.


Jeg er åben for at eksperimentere her for fejlfinding, og tilføje flere oplysninger efter behov, men i sidste ende har jeg ikke længere adgang til disse maskiner.


Jeg har administratorrettigheder i laboratoriet, hvor jeg kører dette, så hvis problemet er med MPICH2-installationen selv, kunne jeg faktisk geninstallere det.


cabal fejler som følger, når jeg forsøger at installere 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


Her er hvad jeg forsøgte at give til - ekstra-lib-dirs og -extra-include-dirs:


--extra-lib-dirs="C:Program FilesMPICH2lib" 
--extra-include-dirs="C:Program FilesMPICH2include"


Jeg har forsøgt at omarrangere, hvor jeg lægger disse flag, undslippe tilbageslagene, ved hjælp af den korte vej PROGRA~1 og forskellige permutationer af disse. Så jeg tror ikke, det kommer til at hjælpe. Jeg har brug for at vide, hvad mpi afhængigheden rent faktisk betyder og finde ud af, hvordan jeg vil tilfredsstille det, så dette bibliotek faktisk kan bygge. Her er det, der bor i de to ovennævnte mapper på dette tidspunkt:


libs:


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

 Directory of C:Program FilesMPICH2lib

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


Omfatte:


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

 Directory of C:Program FilesMPICH2include

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


Er der noget her, der måske genkendeligt mangler?


Jeg er ret stumped på dette tidspunkt. Næsten ethvert forslag ville være nyttigt.


Med venlig hilsen Barend.


PS: Dette skal nok være mærket 'haskell-mpi', men jeg må ikke lave nye tags. Jeg gætter ingen andre virkelig bruger det endnu.


EDIT: Efter Dons 'forslag,


Jeg installerede MingGW og MSYS. Efter at have kørt mingw-get opdatering, brugte jeg mingw32-få hente libtools, mingw32-utils og mingw32-binutils. Jeg indstiller følgende miljøvariabler for hele systemet ved hjælp af Windows-konfigurations GUI:


LIBRARY\_PATH="C:Program FilesMPICH2lib"
C\_INCLUDE\_PATH="C:Program FilesMPICH2include"


echo $LIBRARY\_PATH og echo \%LIBRARY\_PATH\% arbejder nu begge som forventet, ingen overraskelser der. Miljøvariablerne er indstillet. Gør fremskridt.


cabal install haskell-mpi producerer stadig den samme output, som det gjorde før.


Spillet med ld i lang tid, stor rød sild ...


Jeg var nødt til at skjule libmpi.a fra ld for at få det til at fungere, men haskell-mpi bygger nu!


Sæt trin for trin detaljer øverst.

Bedste reference



  Jeg har brug for at vide, hvad mpi afhængigheden rent faktisk betyder



Linjen extra-libraries: mpi betyder, at Cabal vil tilføje -lmpi til ld linker mulighederne. Derudover vil værktøjer, der behandler overskrifter, søge i de inkluderede stier.


Så, hvordan hjælper vi GHC og binutils finder biblioteket?


Ifølge wiki, forudsat at du har mingw eller msys, [18]



  Hvis du har brug for at linke til C-software, skal du definere en miljøvariabel C\_INCLUDE\_PATH, der viser de mapper, hvor overskriftsfilerne kan findes. For at forbinde bibliotekerne skal du også definere en miljøvariabel LIBRARY\_PATH og notere de mapper, hvor .a og .lib-filer kan findes.



Så prøv at indstille stierne til at indeholde stien til overskrifter og biblioteker.