11

我在尝试编译使用同一目录中的模块的简单 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

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

4

1 回答 1

14

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

这应该有效:

gfortran -o test1 test1.f90 modtest.o

一些上下文:

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

所以声明说:

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

于 2010-10-11T09:09:57.660 回答