我在编译一个简单的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
有什么我想念的吗? 谢谢你的帮助
答案 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.f90
与modtest.o
相关联,并生成一个名为test1
的文件作为最终输出。