gpt4 book ai didi

module - 链接 fortran 模块 : "undefined reference"

转载 作者:行者123 更新时间:2023-12-04 20:50:18 25 4
gpt4 key购买 nike

我正在尝试在一个模块中编写一些函数/子例程,这些函数/子例程调用同一模块中的另一个函数并遇到链接器错误。显示相同行为的玩具示例:

!in test.f

module m1
implicit none
contains
real function mult(a, b)
real :: a
real :: b
mult = a * b
return
end function mult

real function sq(a)
real :: a, mult
sq = mult(a, a)
return
end function sq

end module m1

program main
use m1
write(*,*) sq(2.0)
end program

当我尝试编译它时,我遇到了麻烦:
[christopher@archlinux metropolis]$ gfortran -ffree-form test.f
/tmp/ccpzdTLE.o: In function `__m1_MOD_sq':
test.f:(.text+0x20): undefined reference to `mult_'
collect2: error: ld returned 1 exit status

另一方面,只编译 ( gfortran -c -ffree-form test.f -Wall) 运行没有任何提示。

现在这就像编译器错误一样寻找整个世界——在模块中它引用了 mult_当它真的应该与 __m1_MOD_sq ---但是我很难相信这是一个编译器错误,而不是我在做一些愚蠢的事情。

DDG 没有发现任何有用的东西。大多数类似的问题发生在将模块从一个主文件中分离出来时。在这些情况下,当模块与 program 位于同一文件中时,一切正常。 ,这里不是这样。我查看了许多有关 Fortran 模块的页面,但没有看到任何相关内容。

任何人都可以向我指出适当的文档,或者更好的是,解释发生了什么以及如何解决它?

最佳答案

您不需要在函数 sq 中声明函数 mult,即不需要“real::mult”。 sq 已经“知道” mult 因为它在同一个模块中。 mult 的接口(interface)对于 sq 来说是已知的,因为它们在同一个模块中。 mult 和 sq 的接口(interface)对于主程序来说是已知的,因为它使用了模块。同时提供接口(interface)和声明的模块会使编译器感到困惑。

关于module - 链接 fortran 模块 : "undefined reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com