我正在尝试编译一个使用一堆模块的 fortran 程序。编译时出现错误,这让我发疯。该错误是由添加一个子程序引起的,并且在我尝试重新编译程序时发生:
主程序包含这两行:
--
call read_step(nStepOne,molOne)
call read_step(nStep,mol)
--
这是调用文件“fileio.f90”中的子例程之一:
--
subroutine read_step(n,tape)
implicit none
integer, intent(in) :: tape
integer, intent(out) :: n
character(len=6) :: dum
rewind(tape)
read (tape,*)
read (tape,*) dum, n
rewind(tape)
return
!
end subroutine read_step
--
当我尝试编译它时,会出现以下错误:
ifort -o SpIdMD.x *.o -static-intel -openmp
SpIdMD.o: In function `MAIN__':
SpIdMD.f90:(.text+0x3b2): undefined reference to `read_step_'
SpIdMD.f90:(.text+0x3c5): undefined reference to `read_step_'
make: *** [SpIdMD.x] Error 1
对同一模块中的子例程的其他调用没有给出任何错误,我只是看不出对“旧子例程”的调用与我刚刚创建的调用之间有任何区别。
这些“旧子程序”之一的示例,它没有给出任何抱怨,是:
在主程序中:
call get_dim(n_atom,nSnap,mol)
在文件io.f90 中:
subroutine get_dim(n,n_snap,tape)
implicit none
integer,intent(in) :: tape
integer,intent(out) :: n, n_snap
integer :: m
rewind(tape)
read (tape,*,err=1,end=2) n
rewind(tape)
m = 0
do while (.true.)
read (tape,*,err=1,end=3)
m = m +1
end do
3 n_snap = m/(n + 2)
if (m.ne.(n_snap*(n + 2))) stop 'unexpected end of input file'
rewind(tape)
return
!
1 stop 'error in input file'
2 stop 'unexpected end of input file'
end subroutine get_dim
我完全不知道为什么会出现这种行为。如果有人能帮助我解决这个噩梦,我将不胜感激。谢谢!