2013-02-16 3 views
0

Tentative de compilation de MPICH2 sur une machine Windows à l'aide de Cygwin.Problème de compilation MPICH2 à l'aide de Cygwin

Un peu d'informations pertinentes

  • uname $ -> CYGWIN_NT-6.1
  • $ gcc --version -> gcc (GCC) 3.4.4 (cygming spécial, gdc 0,12, en utilisant DMD 0,125 Droits d'auteur (C) 2004 Free Software Foundation, Inc. Ceci est un logiciel libre; voir la source pour les conditions de copie. Il n'y a aucune garantie de ; pas même pour la QUALITÉ MARCHANDE ou l'ADAPTATION À UN USAGE PARTICULIER.
  • MPICH2 Version: 1,5

configuration semble avoir terminé de façon appropriée, mais lors de la compilation, j'ai reçu les éléments suivants:

**** Making src/misc .... 
make --no-print-directory build_lib_bin 
make --no-print-directory mpe_debug_objs 
make --no-print-directory /home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/mpe2/lib/libmpe_nompi.a 
make[7]: `/home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/mpe2/lib/libmpe_nompi.a' is up to date. 
make --no-print-directory /home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/mpe2/lib/libmpe.a 
gcc -I/home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/include -I/home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/ src/include -I.. -I../include -I../../.. -I../../../include -o dbxerr.po -c dbxerr.c 
dbxerr.c: In function `MPE_DefaultHandler': 
dbxerr.c:429: error: parse error before '{' token 
dbxerr.c:432: error: argument "sig" doesn't match prototype 
dbxerr.c:407: error: prototype declaration 
dbxerr.c:461: warning: passing arg 2 of `signal' from incompatible pointer type 
dbxerr.c:463: warning: passing arg 2 of `signal' from incompatible pointer type 
dbxerr.c:465: warning: passing arg 2 of `signal' from incompatible pointer type 
dbxerr.c:467: warning: passing arg 2 of `signal' from incompatible pointer type 
dbxerr.c:469: warning: passing arg 2 of `signal' from incompatible pointer type 
dbxerr.c:473: warning: passing arg 2 of `signal' from incompatible pointer type 
Makefile:82: recipe for target `dbxerr.po' failed 
make[7]: *** [dbxerr.po] Error 1 
Makefile:111: recipe for target `default' failed 
make[6]: *** [default] Error 2 
Makefile:43: recipe for target `build_lib_bin' failed 
make[5]: *** [build_lib_bin] Error 2 
Makefile:26: recipe for target `all' failed                            make[4]: *** [all] Error 2 

Vérification 'dbxerr.c Je trouve ceci:

#if defined(HAVE_SIGHANDLER_T) 
#define SIG_HANDLER_PROTOTYPE sighandler_t 
void MPE_DefaultHandler (SIG_HANDLER_PROTOTYPE); 
void MPE_DefaultHandler(sig) 
int    sig 
#elif defined(MPI_sun4) 
#define SIG_HANDLER_PROTOTYPE int, int, struct sigcontext *, char * 
void MPE_DefaultHandler (SIG_HANDLER_PROTOTYPE); 
void MPE_DefaultHandler(sig, code, scp, addr) 
int    sig, code; 
struct sigcontext *scp; 
char    *addr; 
#elif defined(MPI_IRIX) 
#define SIG_HANDLER_PROTOTYPE int, int, struct sigcontext * 
void MPE_DefaultHandler (SIG_HANDLER_PROTOTYPE); 
void MPE_DefaultHandler(sig, code, scp) 
int    sig, code; 
struct sigcontext *scp; 
#else 
/* The default Posix definition has a single int */ 
#define SIG_HANDLER_PROTOTYPE int 
void MPE_DefaultHandler (SIG_HANDLER_PROTOTYPE); 
void MPE_DefaultHandler(int sig) 
#endif 
{ 
static char buf[128]; 

signal(sig, SIG_DFL); 
if (sig >= 0 && sig <= 20) 
    sprintf(buf, "Caught signal %s", SIGNAME[sig]); 
else 
    strcpy(buf, "Caught signal "); 
fprintf(stderr, "%s\n", buf); 

MPE_Start_debugger(); 
} 

En vérifiant les 'config.log j'ai trouvé:

$ find ./ -name 'config.log' | xargs grep 'HAVE_SIGHANDLER' 
./src/mpe2/src/misc/config.log:| #define HAVE_SIGHANDLER_T 1 
./src/mpe2/src/misc/config.log:#define HAVE_SIGHANDLER_T 1 

Cela confirme que:

void MPE_DefaultHandler (SIG_HANDLER_PROTOTYPE); 
void MPE_DefaultHandler(sig) 
int    sig 

est utilisé par le RPC.

Je trouve que 'SIG_HANDLER_PROTOTYPE' est défini comme:

$ find ./ -name '*.c' | xargs grep 'SIG_HANDLER_PRO' 
./src/mpe2/src/misc/src/dbxerr.c:#define SIG_HANDLER_PROTOTYPE sighandler_t 

'sighandler_t' est défini dans '/usr/include/signal.h' comme:

typedef _sig_func_ptr sighandler_t; /* glibc naming */ 

Enfin, « _sig_func_ptr 'est défini comme:

typedef void (*_sig_func_ptr)(int); 

Ceci est aussi loin que mes propres recherches m'a pris et je ne peux pas semble correspondre à la p les pièces ensemble. Je ne comprends pas pourquoi il y a un décalage de prototype. Je vais continuer à essayer de résoudre ce problème par moi-même, mais toute aide serait appréciée!

Merci d'avance!

MISE À JOUR:

j'étais réexaminent la sortie de « faire » et je pense que je fait une erreur. Je suppose que le problème était avec la déclaration:

void MPE_DefaultHandler (SIG_HANDLER_PROTOTYPE); 

Cependant, le problème semble être la définition:

void MPE_DefaultHandler(sig) 

« sig » semble être un type int, mais je ne peux pas comprendre Quel type 'SIG_HANDLER_PROTOTYPE' est. Quelqu'un peut-il expliquer cela:

typedef void (*_sig_func_ptr)(int); 
+0

Quelle est exactement la version de Cygwin que vous utilisez? – miy

+0

$ uname -srv -> CYGWIN_NT-6.1 1.7.17 (0.262/5/3) 2012-10-19 14:39 – Daeden

Répondre

1

MPICH2 (maintenant juste "MPICH" pour les versions> = 3.0) ne teste pas ou support de Windows.La dernière version fonctionnant sur Windows est 1.4.1p1, et même alors je ne suis pas sûr de l'état du support de Cygwin. L'utilisation de cygwin pourrait être votre meilleur pari si vous avez besoin de MPICH2 v1.5 ou MPICH v3.0.x. La v3.0.2 n'emballe pas MPE avec, donc vous pouvez éviter certains des problèmes que vous mentionnez. Vous pouvez également rapprocher ce comportement avec 1,5 en passant --disable-mpe à configure.

1

Si vous souhaitez toujours que MPICH fonctionne sous Windows, vous pouvez essayer la version fournie par Microsoft. C'est un dérivé de MPICH. Il existe également une ancienne version du binaire Windows disponible. Vous pouvez en savoir plus sur la page de téléchargements pour MPICH (http://www.mpich.org/downloads/).