Fortran 90编译问题:对<modulename> </modulename>的未定义引用

时间:2010-10-11 09:01:41

标签: module compiler-errors fortran fortran90

我在编译一个简单的fortran程序时遇到了麻烦,该程序在同一目录中使用了一个模块。 我有2个文件:test1.f90,其中包含程序和modtest.f90,其中包含模块。

这是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

有什么我想念的吗? 谢谢你的帮助

1 个答案:

答案 0 :(得分:10)

您所做的不是告诉链接器引用模块modtest的位置,以便您的代码可以使用其内容。

这应该有效:

gfortran -o test1 test1.f90 modtest.o

某些背景信息:

-o选项告诉编译器将完整构建(编译+链接)的输出放入名为test1的程序中。然后我们提供一个我们要编译的文件(test1.f90)。最后,我们告诉编译器考虑一个包含另一个版本(modtest.o)的编译输出的文件,并将其链接到test1.f90的编译输出,并使用modtest.o的内容尝试在test1.f90中引用引用模块modtest的引用时(在源代码中的语句use modtest中)。

声明说:

请编译并随后将test1.f90modtest.o相关联,并生成一个名为test1的文件作为最终输出。