Module Fortran 90编译问题:未定义对<;模块名称>;

Module Fortran 90编译问题:未定义对<;模块名称>;,module,compiler-errors,fortran,fortran90,Module,Compiler Errors,Fortran,Fortran90,我在编译一个简单的fortran程序时遇到了问题,该程序使用同一目录中的模块。 我有两个文件: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

我在编译一个简单的fortran程序时遇到了问题,该程序使用同一目录中的模块。 我有两个文件: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
有什么我遗漏的吗?
感谢您的帮助

您所做的并不是告诉链接器reference module
modtest
的位置,以便您的代码可以使用其内容

这应该起作用:

gfortran -o test1 test1.f90 modtest.o
一些背景:

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

因此声明说:


请编译并随后将
test1.f90
链接到
modtest.o
,并生成一个名为
test1
的文件作为最终输出。

是的,谢谢!我已经学习Fortran一个月了,我不敢相信我不知道:p虽然这个命令确实解决了问题,但应该提供一些说明。我将一旦答案得到改善,我很高兴收回我的否决票。解决方案还不够-请提供一些背景说明为什么这可以解决问题。我曾以此为基础编译了一个更大的项目,但也遇到了同样的问题。这对使用其他模块的模块的程序有效吗?请检查一下,你必须看看这个gfortran的选项,看看你是否需要额外的选项。或者:
gfortran modtest.f90 test1.f90-o test1
@PreetSangha:我不明白你在说什么。(关于编程问题呢?所谓“So”,你是指“StackOverflow”—如果是,应该是“So”。如果你不知道怎么办,你会问什么?)我回复的评论似乎被删除了。我想那个人是在问为什么建筑是一个编程问题。不管怎么说,这是近十年前的事了:-)