Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler errors 未定义对'的引用;主要';编译模块时_Compiler Errors_Fortran - Fatal编程技术网

Compiler errors 未定义对'的引用;主要';编译模块时

Compiler errors 未定义对'的引用;主要';编译模块时,compiler-errors,fortran,Compiler Errors,Fortran,我正在学习Fortran,我一直在试图编译一个模块供以后使用 在主程序中,我有这样一个命令,它要求输入两个数字,然后调用模块中的函数: use exponentiate integer::a,b write *, 'A' read *, 'a write *, 'B' read *, 'b write *,expo(a,b) (我没有尝试过,因为我需要先编译模块,但这不是问题所在) 然后,在另一个文件中,我有这段代码,它(如果我理解正确的话)只是一个标准模块,它有一个函数,可以使两个数字成指数

我正在学习Fortran,我一直在试图编译一个模块供以后使用

在主程序中,我有这样一个命令,它要求输入两个数字,然后调用模块中的函数:

use exponentiate
integer::a,b
write *, 'A'
read *, 'a
write *, 'B'
read *, 'b
write *,expo(a,b)
(我没有尝试过,因为我需要先编译模块,但这不是问题所在)

然后,在另一个文件中,我有这段代码,它(如果我理解正确的话)只是一个标准模块,它有一个函数,可以使两个数字成指数

module exponentiate
interface test 
  module procedure expo
end interface
contains
  function expo(a,b)
    type(integer), intent(in)::a,b
    type(integer) expo
    integer::temp
    temp=a
    do i=1,b
      temp=temp*a
    end do
    expo=temp
  end function expo
end module exponentiate
我一直在试图根据编译器错误找出语法,因为Fortran 95规范不可读,几乎没有用处。有了这些,再加上一些维基百科的帮助,我已经能够弄明白一些事情,但我不知道为什么会出现这个编译器错误


我不确定这是否是由于某些语法问题或gfortran的误用,因此希望您能提供帮助。

如果没有相反的选项,编译器驱动程序(以及许多其他驱动程序,无论语言如何)将假定它们获得了完整程序或类似程序所需的所有组件—将源代码编译为目标代码(正确编译),将该目标代码与任何其他指定的目标代码或库链接,并生成可执行文件

在Fortran程序的上下文中,如果没有某种形式的主程序,该过程就无法完成。许多Fortran编译器对主程序的内部名称是
main
或类似名称(存在大小写和附加下划线的变体)-您只是看到了主程序不可供编译器驱动程序使用的后果

使用该编译器驱动程序(以及大多数其他驱动程序),要将Fortran源代码编译为仅目标代码(即file.f90->file.o),请提供
-c
命令行选项。然后,当您准备为您的程序构建最终的可执行文件时,您可以将结果文件与目标代码一起提供给编译器驱动程序的后续调用


或者,在命令行中,在模块的源文件名之后提供主程序的源文件名(以及任何其他源文件的名称)。

哦,哇,是的!成功了!我一直在尝试不同的方法,并使用gfortran命令将所有文件(包括主程序和模块)作为参数传递给它,它编译和工作也没有问题。谢谢还有一个问题,你将如何编译一个使用100个模块的程序?在CLI中使用gfortran似乎无法很好地升级。我猜您指的是“100个文件”。您使用某种构建自动化软件。