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);
Quelle est exactement la version de Cygwin que vous utilisez? – miy
$ uname -srv -> CYGWIN_NT-6.1 1.7.17 (0.262/5/3) 2012-10-19 14:39 – Daeden