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

Edd*_*ddy 10 fortran module compiler-errors fortran90

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

这是test1.f90:

program test
  use modtest
  implicit none
  print*,a
end program test
Run Code Online (Sandbox Code Playgroud)

这是modtest.f90:

module modtest
  implicit none
  save
  integer :: a = 1
end module modtest
Run Code Online (Sandbox Code Playgroud)

两个文件都在同一目录中.我像这样编译modtest.f90和test.f90:

gfortran -c modtest.f90
gfortran -o test1 test1.f90
Run Code Online (Sandbox Code Playgroud)

但后来我得到了这个错误:

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

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

Pre*_*gha 12

你正在做的不是告诉链接器引用模块在哪里,modtest以便你的代码可以使用它的内容.

这应该工作:

gfortran -o test1 test1.f90 modtest.o
Run Code Online (Sandbox Code Playgroud)

一些背景:

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

所以声明说:

请编译并随后链接test1.f90modtest.o,并生成一个名为test1最终输出的文件.

  • 是的,谢谢!我一直在学Fortran一个月了,我简直不敢相信我不知道:P (3认同)