Я пытаюсь скомпилировать программу fortran, которая использует кучу модулей. Я получаю ошибку, когда компилирую ее, и это сводит меня с ума. Ошибка возникла при добавлении одной подпрограммы и происходит, когда я пытаюсь скомпилировать программу:Ошибка компиляции 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)
В fileio.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
У меня нет абсолютно никакой идеи, почему это поведение. Буду признателен, если кто-нибудь поможет мне решить этот кошмар. Благодаря!
Вы запустили 'make clean', а затем попробовали' make' снова? –
Да, но ничего не решает. Я убедился, что fileio.o (содержащий модуль) обновлен. – user2296052