回 帖 发 新 帖 刷新版面

主题:f77+mpi编译出错

FFLAGS  = -O2  -w -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib 
CFLAGS  = -O2  -w 

CODE    = p2d3t.e

XDIR    = run

SG21:$(SRC) $(SG21SRC)
        mpif77  $(FFLAGS) -o $(CODE) $(SRC) $(SG21SRC) 
        cp $(CODE) $(XDIR)/run1

别人的f77+mpi程序,在我的虚拟机ubuntu系统下编译出错,上面是部分makefile代码,我将FFLAGS路径修改后还是有问题,具体问题如下:

l****@ubuntu:~/Downloads/soft3$ make
f77 -O2  -w -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib   -c -o e2d3ts.o e2d3ts.f
   e2d3ts:
Error on line 138: Declaration error for t0: adjustable dimension on non-argument
Error on line 138: wr_ardecls:  nonconstant array size
Error on line 138: wr_ardecls:  nonconstant array size
/usr/bin/f77: aborting compilation
make: *** [e2d3ts.o] Error 25

   我自己感觉应该是可调数组维数的问题,提示错误的源程序如下:
c
      subroutine e2d3ts(nconv,redf,linear_niter,
     1                  iter_method_sles,npreconditioner)
      implicit real*8 (a-h,o-z)
      include  "mpi2d3t.i"
      include  "snesf.h"
c
      dimension    t0(n,0:imcell+1,0:jmcell+1)
      dimension    linear_niter(1)

但是不知道怎么修改,我查看相关介绍,f77是支持可调数组维数的啊,望高人指点,多谢。我刚刚接触fortran希望能回答的详细些。


回复列表 (共4个回复)

沙发

f77是什么编译器? 为什么编译mpi不是类似mpif77, mpif90这样的编译命令的?
看出错信息,觉得是数组维度有问题. 这里是定义区,还没有涉及到mpi的代码.

板凳


自己找了解决办法,安装一下g77,就可以通过数组的编译,不过还有进一步的错误,

init0_sg21.o: In function `init0_':
init0_sg21.f:(.text+0x2725): undefined reference to `e_wsle'
init0_sg21.f:(.text+0x2741): undefined reference to `s_wsfe'
init0_sg21.f:(.text+0x2746): undefined reference to `e_wsfe'

3 楼

上面的错误应该是
“下划线引起的,g77在编绎时要在每个标识符的后面加下划线,g77有一个命令行选项可以关闭此特性”
不知道对不对,要是对,请高人指点怎么关闭这个特性 谢谢

4 楼

g77我没有用过只用过一下gfortran. 还有不认下划线的fortran编译器? 印象中下划线作为变量或者函数名字是允许的,况且这个下划线只是在字母之间.

我是看到你使用make之后的编译命令
l****@ubuntu:~/Downloads/soft3$ make
f77 -O2  -w -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib   -c -o e2d3ts.o e2d3ts.f
对不同的mpi库和不同编译器可能命令有所不同, 我不确定你是否已经配置好并确信这个命令没有问题. 如果没问题这段当没讲过.

更具体的我帮不了你了, 待高手指点.

我来回复

您尚未登录,请登录后再回复。点此登录或注册