【问题标题】:Fortran undefined reference, collect2.exe: error: ld returned 1 exit status [duplicate]Fortran 未定义引用,collect2.exe:错误:ld 返回 1 退出状态 [重复]
【发布时间】:2021-08-04 15:18:17
【问题描述】:

我正在尝试编写两个简单的函数,一个包含实函数的定义,另一个使用前一个函数来找到它的导数。但是我不断收到未定义的引用错误。

我的模块:

module module_name

    contains 

    function f(x)

        implicit none
        
        real(8)           :: x
        real(8)           :: f
    
        f= 2.71**x 

    endfunction

    function f_p_def(x)

        implicit none 

        real(8)           :: x, dx, f
        real(8)           :: f_p_def

        dx= 0.1

        f_p_def= (f(x+dx)-f(x))/dx
    
    endfunction 
endmodule 

然后在我的主程序中我有这个:

program test 

use module_name

real(8)     :: f1, x

x=0

f1= f_p_def(x)

write(*,*) f1

endprogram 

这是错误:

.\principal.o:principal.f95:(.text+0x27): 对 `__module_name_MOD_f_p_def' 的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态

【问题讨论】:

标签: fortran


【解决方案1】:

您的模块似乎在一个单独的文件中定义。这意味着在生成最终可执行文件时,您还必须添加目标文件。

编辑为了澄清,您需要编译每个源文件,生成一个目标文件。然后最后将它们链接在一起。编译器驱动程序(本例中为 gfortran)可以自动为您运行链接器。

分离出所有这些步骤,您需要执行以下操作:

gfortran -O2 -g -fcheck=all -c principal.f95
gfortran -O2 -g -fcheck=all -c module_name.f95
gfortran -O2 -g -fcheck=all principal.o module_name.o -o myprogram
./myprogram

其中 module_name.f95 是定义 module_name 的文件的名称。如果不是,请适当修改。在上面,前两个命令编译源文件,生成目标文件。第三个命令实际上并不编译任何东西,而是将两个目标文件链接在一起,生成可执行文件。然后最后的命令执行可执行文件。

【讨论】:

  • 是的,模块在一个单独的文件中。 principal.f95 是主程序所在的位置,module_name.f95 是模块 module_name 所在的位置。我如何准确地运行该命令?我总是执行 gfortran -c prinpal.f95 然后 gfortran -o prog principal.o 然后 prog.exe 来执行程序并且它可以工作。我输入了你输入的内容,它给了我 module_name.o 没有这样的文件或目录。
  • @OmarHamze 请参阅stackoverflow.com/a/67534897/721644 在上面的回答中,您显然必须将“module_name”更改为“principal”。所以principal.o.
  • 你好,我按照你说的做了,你发的链接里有什么,错误基本一样:module.o:module.f95:(.text+0x37): undefined reference to f_' module.o:module.f95:(.text+0x44): undefined reference to f_' collect2.exe:错误:ld 返回 1 个退出状态
  • @OmarHamze 这是一个新的不同错误。从f_p_def 内的`real(8) :: x, dx, f` 中删除f。我们有关于这种错误的问题和答案。请参阅stackoverflow.com/questions/23992889/… 并点击那里的链接。
  • @OmarHamze:我澄清了我的答案,HTH。
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 2020-10-04
  • 1970-01-01
  • 2013-06-01
  • 2020-05-06
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多