使用Cygwin MPICH2编译问题 [英] MPICH2 compilation issue using Cygwin

查看:212
本文介绍了使用Cygwin MPICH2编译问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图编译MPICH2使用Cygwin在Windows计算机上。

相关信息的比特


  • $ UNAME - > CYGWIN_NT-6.1

  • $ GCC --version - >
    海湾合作委员会(GCC)3.4.4(cygming特殊,GDC 0.12,使用DMD 0.125)
    版权所有(C)2004自由软件基金会
    这是自由软件;参见复印条件的来源。有否
    保证;甚至不是针对特定目的的适销。

  • MPICH2版本:1.5

配置似乎已经适当地完成,但在编译过程中,我收到以下内容:

  ****制作的src /杂项....
使--no打印目录build_lib_bin
使--no打印目录mpe_debug_objs
使--no打印目录/home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/mpe2/lib/libmpe_nompi.a
令[7]:`/home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/mpe2/lib/libmpe_nompi.a'是最新的。
使--no打印目录/home/Daeden/issm/trunk-jpl/externalpackages/mpich2/src/src/mpe2/lib/libmpe.a
GCC -I /家庭/ Daeden / ISSM /干线喷气推进实验室/ externalpackages / MPICH2 / src目录/ src目录/包括-I /家庭/ Daeden / ISSM /干线喷气推进实验室/ externalpackages / MPICH2 / src目录/ src目录/包括-I .. - 我../包括-I ../../ .. -I ../../../包括-o dbxerr.po -c dbxerr.c
dbxerr.c:在功能`MPE_DefaultHandler:
dbxerr.c:429:错误:前解析错误{令牌
dbxerr.c:432:错误:参数SIG不匹配原型
dbxerr.c:407:错误:原型声明
dbxerr.c:461:警告:从兼容的指针类型传递`信号的ARG 2
dbxerr.c:463:警告:从兼容的指针类型传递`信号的ARG 2
dbxerr.c:465:警告:从兼容的指针类型传递`信号的ARG 2
dbxerr.c:467:警告:从兼容的指针类型传递`信号的ARG 2
dbxerr.c:469:警告:从兼容的指针类型传递`信号的ARG 2
dbxerr.c:473:警告:从兼容的指针类型传递`信号的ARG 2
的Makefile:82:配方目标`dbxerr.po'失败
令[7]:*** [dbxerr.po]错误1
Makefile中:111:配方目标'默认'失败
使[6]:*** [默认]错误2
的Makefile:43:配方目标`build_lib_bin'失败
使[5]:*** [build_lib_bin]错误2
的Makefile:26:配方目标'所有'失败使[4]:*** [全部]错误2

检查'dbxerr.c我觉得这样的:

 #如果定义(HAVE_SIGHANDLER_T)
#定义SIG_HANDLER_PROTOTYPE sighandler_t
无效MPE_DefaultHandler(SIG_HANDLER_PROTOTYPE);
无效MPE_DefaultHandler(SIG)
INT SIG
#elif指令定义(MPI_sun4)
#定义SIG_HANDLER_PROTOTYPE INT,INT,结构sigcontext *,字符*
无效MPE_DefaultHandler(SIG_HANDLER_PROTOTYPE);
无效MPE_DefaultHandler(SIG,code,SCP,地址)
INT SIG,code;
结构sigcontext * SCP;
字符*地址;
#elif指令定义(MPI_IRIX)
#定义SIG_HANDLER_PROTOTYPE INT,INT,结构sigcontext *
无效MPE_DefaultHandler(SIG_HANDLER_PROTOTYPE);
无效MPE_DefaultHandler(SIG,code,SCP)
INT SIG,code;
结构sigcontext * SCP;
#其他
/ *默认的Posix定义具有单个int * /
#定义SIG_HANDLER_PROTOTYPE INT
无效MPE_DefaultHandler(SIG_HANDLER_PROTOTYPE);
无效MPE_DefaultHandler(INT SIG)
#万一
{
静态字符BUF [128];信号(SIG,SIG_DFL);
如果(SIG> = 0&放大器;&安培; SIG< = 20)
    sprintf的(BUF,夹缝信号%S,SIGNAME [信号]);
其他
    的strcpy(BUF,夹缝信号);
fprintf中(标准错误,%S \\ n,BUF);MPE_Start_debugger();
}

通过检查的config.log的我发现:

  $找到./ -name'的config.log'| xargs的grep的HAVE_SIGHANDLER
./src/mpe2/src/misc/config.log:| #定义HAVE_SIGHANDLER_T 1
./src/mpe2/src/misc/config.log:#define HAVE_SIGHANDLER_T 1

这证实了:

 无效MPE_DefaultHandler(SIG_HANDLER_PROTOTYPE);
无效MPE_DefaultHandler(SIG)
INT SIG

正在使用的CPP

我发现,'SIG_HANDLER_PROTOTYPE被定义为:

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

sighandler_t'在'/usr/include/signal.h'定义为:

 的typedef _sig_func_ptr sighandler_t; / *的glibc命名* /

最后,'_sig_func_ptr'被定义为:

 无效的typedef(* _sig_func_ptr)(INT);

这是据我自己的研究采取了我,我似乎无法适应拼在一起。我不明白为什么有一个原型不匹配。我会继续尝试并解决我自己的这个问题,但任何帮助,将AP preciated!

在此先感谢!

更新:

我重新审视'制作'的输出,我想我犯了一个错误。我认为这个问题是与声明:

 无效MPE_DefaultHandler(SIG_HANDLER_PROTOTYPE);

然而,这个问题似乎是与定义

 无效MPE_DefaultHandler(SIG)

SIG似乎是一个int类型,但我不明白是什么类型的'SIG_HANDLER_PROTOTYPE'的。有人可以解释这一点:

 无效的typedef(* _sig_func_ptr)(INT);


解决方案

如果您仍然希望得到MPICH在Windows上工作,你可能会尝试通过微软打包的版本。它是MPICH的衍生物。还有一个老版本Windows的二进制文件。你可以找到更多MPICH( http://www.mpich.org/downloads/)。

Attempting to compile MPICH2 on a Windows machine using Cygwin.

A bit of relevant information

  • $ uname -> CYGWIN_NT-6.1
  • $ gcc --version -> gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • MPICH2 Version: 1.5

Configuration seems to have completed appropriately, but during compilation I received the following:

**** 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

Checking 'dbxerr.c' I find this:

#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( );
}

By checking the 'config.log's I found:

$ 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

This confirms that:

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

is being used by the CPP.

I found that 'SIG_HANDLER_PROTOTYPE' is defined as:

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

'sighandler_t' is defined in '/usr/include/signal.h' as:

typedef _sig_func_ptr sighandler_t; /* glibc naming */ 

Finally, '_sig_func_ptr' is defined as:

 typedef void (*_sig_func_ptr)(int);

This is as far as my own research has taken me and I can't seem to fit the pieces together. I do not understand why there is a prototype mismatch. I will continue to try and fix this issue on my own, but any help would be appreciated!

Thanks in advance!

UPDATE:

I was reexamining the output of 'make' and I think I made a mistake. I assumed the problem was with the declaration:

void MPE_DefaultHandler ( SIG_HANDLER_PROTOTYPE );

However, the problem appears to be with the definition:

void MPE_DefaultHandler( sig )

'sig' appears to be an int type, but I can't understand what type 'SIG_HANDLER_PROTOTYPE' is. Can someone explain this:

 typedef void (*_sig_func_ptr)(int);

解决方案

If you still want to get MPICH working on Windows, you might try the version packaged by Microsoft. It's a derivative of MPICH. There's also an old version of the Windows binary available. You can find out more on the downloads page for MPICH (http://www.mpich.org/downloads/).

这篇关于使用Cygwin MPICH2编译问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆