私は束のモジュールを使用するfortranプログラムをコンパイルしようとしています。私はそれをコンパイルするときにエラーが発生し、それは私を夢中にしています。エラーが1つのサブルーチンの添加によって発信され、私は、プログラムを再コンパイルしようとしたときに行われます。Fortranコンパイルエラー - 定義されていない参照
主なプログラムは以下の2行が含まれます。
-
-call read_step(nStepOne,molOne)
call read_step(nStep,mol)
を
これはファイル "fileio.f90"内のサブルーチンの1つを呼び出しています:
-
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
その他の呼び出しはすべてのエラーを与えていない、と私はしないでください「古いサブルーチン」への呼び出しと作成した呼び出しの違いを確認してください。
苦情を与えるものではありませんこれらの "古いサブルーチン"、の1の例は、次のとおりです。fileio.f90で
call get_dim(n_atom,nSnap,mol)
:
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