11

同じディレクトリ内のモジュールを使用する単純な fortran プログラムをコンパイルしようとすると問題が発生します。プログラムを含む test1.f90 とモジュールを含む modtest.f90 の 2 つのファイルがあります。

これは test1.f90 です。

program test
  use modtest
  implicit none
  print*,a
end program test

これは modtest.f90 です:

module modtest
  implicit none
  save
  integer :: a = 1
end module modtest

両方のファイルは同じディレクトリにあります。modtest.f90 と test.f90 を次のようにコンパイルします。

gfortran -c modtest.f90
gfortran -o test1 test1.f90

しかし、その後、次のエラーが発生します。

/tmp/cckqu8c3.o: In function `MAIN__':
test1.f90:(.text+0x50): undefined reference to `__modtest_MOD_a'
collect2: ld returned 1 exit status

足りないものはありますか?助けてくれてありがとう

4

1 に答える 1

14

あなたがしていることはmodtest、あなたのコードがその内容を使用できるように、参照モジュールがどこにあるかをリンカーに伝えていないことです。

これは機能するはずです:

gfortran -o test1 test1.f90 modtest.o

いくつかのコンテキスト:

この-oオプションは、フルビルド(コンパイル+リンク)の出力を。というプログラムに入れるようにコンパイラーに指示しますtest1。次に、コンパイルするファイルを提供します(test1.f90)。最後に、別のビルド()のコンパイル済み出力を含むファイルを検討し、modtest.oこれをのコンパイル済み出力にリンクし、モジュールを参照するtest1.f90内の参照を並べ替えるときにtest1.f90の内容を使用するようにコンパイラーに指示しています。 (ソースコードのステートメント内)。modtest.omodtestuse modtest

したがって、ステートメントは次のように述べています。

コンパイルしてからにリンクtest1.f90し、最終出力modtest.oと呼ばれるファイルを作成してください。test1

于 2010-10-11T09:09:57.660 に答える