gfortran:如果在第二个模块中使用,则找不到模块

gfortran:如果在第二个模块中使用,则找不到模块,fortran,Fortran,我正在尝试使用gfortran编译以下示例代码: module a use b implicit none save real :: c = 2.5 end module a module b use a implicit none save real :: d = 1.5 end module b program moduletest use a use b implicit none print*, c print*, d end program moduletest 事实上,我不理

我正在尝试使用gfortran编译以下示例代码:

module a
use b
implicit none
save
real :: c = 2.5 
end module a

module b
use a
implicit none
save
real :: d = 1.5
end module b

program moduletest
use a
use b
implicit none
print*, c
print*, d
end program moduletest
事实上,我不理解以下错误信息: 模块测试f90:2:6:

   use b
      1
Fatal Error: Can't open module file ‘b.mod’ for reading at (1): No such file or directory
compilation terminated.

为什么我不能在模块a中使用模块b,反之亦然?谢谢你的帮助

不允许模块的循环依赖关系。本标准规定如下:

USE语句指定USE关联。USE语句是一个 引用它指定的模块。在使用语句时 处理后,指定模块的公共部分应 可用。模块不得直接或间接引用自身 间接地

根据您的示例,只有当模块
a
可用时,才能生成模块
b
。但是如果模块
b
可用,则只能构建模块
a
。因此模块
a
间接引用自身。(
a
需要
b
哪个需要
a
哪个需要
b
哪个需要
a
哪个在无穷远处)


<> >重要的是要认识到,<>代码使用语句与包含C或C++等其他语言中的头文件的情况不同,

< P>不允许模块的循环依赖。本标准规定如下:

USE语句指定USE关联。USE语句是一个 引用它指定的模块。在使用语句时 处理后,指定模块的公共部分应 可用。模块不得直接或间接引用自身 间接地

根据您的示例,只有当模块
a
可用时,才能生成模块
b
。但是如果模块
b
可用,则只能构建模块
a
。因此模块
a
间接引用自身。(
a
需要
b
哪个需要
a
哪个需要
b
哪个需要
a
哪个在无穷远处)


<> >重要的是要认识到<>代码使用语句远不同于包括其他语言的头文件,如C或C++。现在,您在这里似乎并不需要它,那么这方面对您的问题有多重要?除了循环依赖关系之外,您还需要在编译模块
a
之前编译模块
b
。这就是消息可能的意思。谢谢,但尝试gfortran-c a.f90之类的方法后,我得到了相同的错误(有点):使用b 1致命错误:无法打开模块文件“b.mod”以在(1)处读取:没有这样的文件或目录这正是循环依赖点。你不能有这样的循环依赖。现在,您在这里似乎并不需要它,那么这方面对您的问题有多重要?除了循环依赖关系之外,您还需要在编译模块
a
之前编译模块
b
。这就是消息可能的意思。谢谢,但是尝试像gfortran-c a.f90这样的东西,我得到了相同的错误(有点):使用b 1致命错误:无法打开模块文件“b.mod”以便在(1)读取:没有这样的文件或目录这正是循环依赖点。