【问题标题】:Undefined reference to procedure defined in the same module [duplicate]对同一模块中定义的过程的未定义引用[重复]
【发布时间】:2014-07-22 11:22:22
【问题描述】:

我正在尝试熟悉 fortran 中的模块,为此我使用模块创建了一个简单的代码。附上源代码。

主程序

program main_prog
  use mod_f_g_h
  !
  implicit none
  ! f,g,h,s are defined in mod_f_g_h
  real :: x,y
  !
  ! read x,y
  print *, "enter x and y "
  read*, x, y
  !
  ! check
  if( y == 0 ) then
    print*, "y must be non-zero"
    stop
  end if
  !
  ! print on screen
  print*, '  x   = ', x
  print*, '  y   = ', y
  print*, 'x + y = ', f(x,y)
  print*, 'x * y = ', g(x,y)
  print*, 'x * x = ', s(x)
  print*, 'y * y = ', s(y)
  print*, 'x / y = ', h(x,y)

end program main_prog

模块

module mod_f_g_h
  !
  ! use other modules
  implicit none
  !
contains
  !
  real function s(x)
    implicit none
    real :: x,g
    s = g(x,x)
  end function s
  !
  real function f(x,y)
    implicit none
    real :: x,y
    f = x+y
  end function f
  !
  real function g(x,y)
    implicit none
    real :: x,y
    g = x*y
  end function g
  !
  real function h(x,y)
    implicit none
    real :: x,y
    h = x/y
  end function h
end module mod_f_g_h

但是当我尝试编译和链接代码时,使用

gfortran -c mod_f_g_h.f90
gfortran -c main.f90
gfortran *.o -o run.x

得到以下错误(在最后一步)

mod_f_g_h.o: In function `__mod_f_g_h_MOD_s':
mod_f_g_h.f90:(.text+0xb6): undefined reference to `g_'
collect2: ld returned 1 exit status

我想,我已经定义了所有的变量,而且我没有链接任何外部库,所以我不知道为什么会出现这个错误?有什么意见/想法吗?

【问题讨论】:

  • 我缩进了您的代码以使其更具可读性。你绝对不会到处重复implicit none。每个模块一次就足够了。此外,空行中的感叹号对可读性弊大于利。
  • 我只是一个初学者,对良好的编程实践不是很熟悉,谢谢指出

标签: module fortran


【解决方案1】:

它应该是

real function s(x)
implicit none
real :: x
s = g(x,x)
end function s

在模块内部。

VladimirF 的进一步解释:

通过real g,您将s 内部的函数g 声明为与模块中的函数不同的外部真正函数。

【讨论】:

  • 我要补充一点,通过real g,您将s 内部的函数g 声明为与模块中的函数不同的外部 真正函数。跨度>
  • @VladimirF 谢谢,我将它添加到答案中......
  • @VladimirF 那么 s 怎么知道 g 是什么?它通过模块吗?如果我的问题听起来很原始,我很抱歉。
  • 模块为所有包含的过程提供显式接口。
  • @AlexanderVogt 非常感谢您
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2017-04-14
  • 2012-05-24
  • 2011-07-27
  • 2013-06-20
  • 2012-02-05
  • 2014-12-27
相关资源
最近更新 更多