Fortran 90个的模块是倏逝的生物。 我使用的是(单数)模块取得了一些成功一段时间(采用英特尔Fortran的可视化和Visual Studio 2010编译)。 然后,我写了另一个模块,并试图利用它在另一个功能,收到此错误之前:
error #7002: Error in opening the compiled module file. Check INCLUDE paths.
所以我删除有问题的模块。 但现在我收到了同样的错误试图访问我原来的模块时后!
我怎样才能找到这些神秘的生物? 为什么一个模块的工作,但不是两个? 我假设我需要删除并重新编译它们,或者告诉编译器,包括他们莫名其妙。 我知道源代码的文件位置,但不是他们编译成 。
对于特定的处理器(许多其它的Fortran处理器具有相似的特性,但在细节上有所不同):
当一个模块被成功编译,编译器生成包含有关由所述模块所提供的实体的信息的mod文件(以及可能的obj文件)。 正是这个mod文件,您引用错误消息指。 编译器需要在遇到USE声明的模块,而其他编译源这个mod文件。 (OBJ文件被链接阶段使用。)
因此,模块USE'd前,编译器必须在一段时间内已经编译该模块的源代码。 这意味着,该模块的源代码(MODULE ... END MODULE)必须与先前在源文件中USE语句之前已经出现,或者必须已经在之前被使用USE声明的源文件编译一个单独的文件。
当使用Visual Studio中的英特尔Fortran编译项目,构建环境将自动尝试安排项目中的源文件适当的编译顺序。 当使用ifort命令在命令行编译程序员负责管理的编译顺序。
接收所生成的MOD文件的目录是通过提供给编译器的第一/模块命令行选项指定。 在Visual Studio中这个选项是使用Fortran语言>输出文件>模块路径属性设置。 默认情况下,在Visual Studio Fortran的项目有此属性设置为当前配置的名称,因此国防部文件出现在所谓的调试或发布该项目的子目录。 在不存在/模块的命令行选项的MOD文件出现在当前目录。
由/模块命令行选项(或等效的Visual Studio属性)指定的目录也被用于搜索对mod文件。 此外,由/ I命令行选项指定的目录(在Visual Studio中,Fortran语言>常规>附加包含目录)进行搜索。
它不是从你的问题清楚你如何分配你的模块之间的源文件,你是否有一个单一的Visual Studio项目或多个项目等,如果你只处理一个单一的项目则通常所需要的所有是所有Fortran文件添加到项目的源文件,默认设置应该“工作”。 错误在寻找的MOD文件可能是因为:
该模块的相关源不在该项目的源文件之一;
源失败某些其他原因模块的编译(是早前在构建顺序列出的其他错误?)
一个模块其在一个特定的源文件使用后所定义;
有模块之间的循环依赖(模块A使用它使用A或类似的模块B - 这不是由语言的规则允许);
这混淆构建顺序的自动确定某些源结构(构建系统的旧版本中使用的语句与双冒号的F2003形式混淆,再加上它有可能混淆USE语句使得构建系统无法识别它们)但这些方面是相当模糊的。
随着多个项目的Fortran在Visual Studio中有可能需要修改的模块搜索目录的相关项目,使得它们能够找到项目的依赖关系树以前的项目编制的MOD文件。 英特尔Fortran更高版本的处理这方面也自动,如果在Visual Studio中的项目间的依赖设置是否正确。