同じモジュール内の別の関数を呼び出す関数/サブルーチンをモジュールに書き込もうとしていますが、リンカー エラーが発生します。同じ動作を示すおもちゃの例:
!in test.f
module m1
implicit none
contains
real function mult(a, b)
real :: a
real :: b
mult = a * b
return
end function mult
real function sq(a)
real :: a, mult
sq = mult(a, a)
return
end function sq
end module m1
program main
use m1
write(*,*) sq(2.0)
end program
これをコンパイルしようとすると、問題が発生します。
[christopher@archlinux metropolis]$ gfortran -ffree-form test.f
/tmp/ccpzdTLE.o: In function `__m1_MOD_sq':
test.f:(.text+0x20): undefined reference to `mult_'
collect2: error: ld returned 1 exit status
一方、 ( gfortran -c -ffree-form test.f -Wall
) だけをコンパイルすると問題なく実行されます。
今、これはコンパイラエラーのように世界中を探します---モジュールでは、mult_
実際に対処すべきときへの参照が表示されます__m1_MOD_sq
---しかし、これがコンパイラのバグであるとは信じがたいです私が愚かなことをするよりも。
DDG は有用なものを見つけませんでした。同様の問題のほとんどは、1 つのメイン ファイルからモジュールを分割する際に発生しました。そのような場合、モジュールが と同じファイルにprogram
あるとうまくいきましたが、ここではそうではありません。Fortran のモジュールに関する多くのページを見ましたが、関連するものは何もありませんでした。
誰かが適切なドキュメントを教えてくれますか、それとも何が起こっているのか、どうすれば修正できるかを説明してくれますか?