gpt4 book ai didi

linker - fortran 中的多重定义链接错误(ifort - gfortran)

转载 作者:行者123 更新时间:2023-12-02 05:41:00 26 4
gpt4 key购买 nike

嗯,我遇到了这个问题(描述很长,但我认为很容易解决)。我有三个文件:

nrtype.f90,它有一些愚蠢的定义,但它被以下文件使用:

module nrtype
integer, parameter :: I4B = SELECTED_INT_KIND(9)
integer, parameter :: I2B = SELECTED_INT_KIND(4)
integer, parameter :: I1B = SELECTED_INT_KIND(2)
integer, parameter :: SP = KIND(1.0)
integer, parameter :: DP = KIND(1.0D0)
endmodule nrtype

LUd.f90,它构成了工作的一部分:

module descomposicionLU
use nrtype

implicit none

contains

subroutine LUd(A, LU, bk)
implicit none

real(DP), intent (in), dimension(:,:) :: A
real(DP), intent (out), dimension(:,:) :: LU
integer(I2B), dimension(size(A,1),2) :: bk

<more code that doesn't worth to mention>

endsubroutine LUd

<more code that doesn't worth to mention>

endmodule descomposicionLU

一个名为 FrontBackSub.f90 的文件,它完成其他部分的工作:

module FrontBack

use nrtype

implicit none

contains

function FrontSLU(A,B) result (X)
implicit none
real(DP), dimension(:,:), intent (in) :: A, B
real(DP), dimension(size(B,1),size(B,2)) :: X

<more code>

endfunction FrontSLU

endmodule FrontBack

最后main.f90,如下所示:

program main
use descomposicionLU
use FrontBack

implicit none

integer, parameter :: N=3
real(DP), dimension(N,N) :: MA, MLU
integer(I2B), dimension(N,2) :: Vbk


MA(1,:)=(/1.0, 7.0, 11.0/)
MA(2,:)=(/14.0, 24.0, 19.0/)
MA(3,:)=(/7.0, 8.0, 9.0/)

call LUd(MA, MLU, Vbk)

endprogram main

但是,问题出现在编译期间,我得到了 ifort nrtype.f90 FrontBackSub.f90 LUd.f90 FrontBackSub.f90 main.f90:

/tmp/ifortbW2y7D.o: In function `frontback._':
FrontBackSub.f90:(.text+0x0): multiple definition of `frontback._'
/tmp/ifortVQdBCN.o:FrontBackSub.f90:(.text+0x0): first defined here
/tmp/ifortbW2y7D.o: In function `frontback_mp_frontslu_':
FrontBackSub.f90:(.text+0x10): multiple definition of `frontback_mp_frontslu_'
/tmp/ifortVQdBCN.o:FrontBackSub.f90:(.text+0x10): first defined here
/tmp/ifortbW2y7D.o: In function `frontback_mp_backs_':
FrontBackSub.f90:(.text+0x460): multiple definition of `frontback_mp_backs_'
/tmp/ifortVQdBCN.o:FrontBackSub.f90:(.text+0x460): first defined here

或者,更清楚的是,使用 gfortran nrtype.f90 FrontBackSub.f90 LUd.f90 FrontBackSub.f90 main.f90:

/tmp/ccpZnjOp.o: In function `__frontback_MOD_backs':
FrontBackSub.f90:(.text+0x0): multiple definition of `__frontback_MOD_backs'
/tmp/ccsr4QjQ.o:FrontBackSub.f90:(.text+0x0): first defined here
/tmp/ccpZnjOp.o: In function `__frontback_MOD_frontslu':
FrontBackSub.f90:(.text+0x582): multiple definition of `__frontback_MOD_frontslu'
/tmp/ccsr4QjQ.o:FrontBackSub.f90:(.text+0x582): first defined here
collect2: error: ld returned 1 exit status

所以,它说 FrontBackSub.f90 中的函数(它是复数,因为当我添加新函数时,问题会扩展到它们)被定义了多次,但显然,它们没有被定义。

我看不到的问题在哪里?

感谢各位 friend 的宝贵时间。

最佳答案

为什么编译命令中有两次源代码FrontBackSub.f90?只是不要这样做。

关于linker - fortran 中的多重定义链接错误(ifort - gfortran),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059177/

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