Module Fortran 90编译问题:未定义对<;模块名称>;
我在编译一个简单的fortran程序时遇到了问题,该程序使用同一目录中的模块。 我有两个文件:test1.f90,其中包含程序和modtest.f90,其中包含模块 这是test1.f90: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
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”。如果你不知道怎么办,你会问什么?)我回复的评论似乎被删除了。我想那个人是在问为什么建筑是一个编程问题。不管怎么说,这是近十年前的事了:-)