我是Fortran的新手,所以也许这是一个简单的问题,但我没有找到任何解决方案,通过浏览SO上的类似帖子。
我的问题是,当我尝试在testsrft.f95中编译我的主程序时,它使用srft.f95中定义的模块srftModule执行
gfortran -c dfft.f
gfortran -c srft.f95
gfortran -c testsrft.f95
gfortran dfft.o srft.o testsrft.o -o testsrft
(srftModule中的子程序需要dfft.f中的Fortran77代码),我收到链接器错误
testsrftF.o: In function `MAIN__':
testsrftF.f95:(.text+0x98): undefined reference to `fftofmat_'
collect2: ld returned 1 exit status
模块定义如下
module srftModule
implicit none
contains
... (some subroutines)
subroutine fftofmat(A)
implicit none
real*8, dimension(:, :), intent(inout) :: A
...
end subroutine fftofmat
... (some more subroutines)
end module srftModule
在我的主文件中,我有
program testsrft
use srftModule
implicit none
...(code to initialize a 10x10 matrix A)
call fftofmat(A)
end program testsrft
为什么链接器会抱怨?
答案 0 :(得分:2)
一些背景知识:
未定义引用错误中引用的符号与模块过程引用的符号的模式不匹配。总而言之,这意味着在主程序中,编译器不认为fftofmat是一个模块过程 - 这是您需要解决的问题。这与您展示的代码相反,所以我要寻找的东西......
虽然我不认为这是您的问题的原因,但请注意,某些系统对链接步骤中的目标文件和库的排序(更多)很敏感 - 在后面的文件中搜索符号在命令行上引用特定符号的文件。为了健壮,你应该反过来订购你的目标文件。