链接Fortran 77源代码和子程序

时间:2017-06-22 19:20:07

标签: function fortran gfortran fortran77 linker-errors

我正在尝试编译以下名为test_matrix.f的测试程序:

PROGRAM test_matrix
  IMPLICIT NONE
  REAL*8 A(2,2), B(2,2), Bt(2,2), C(2,2)
  REAL detA, detB, detC
  REAL getdet
  A(1,1) = 1
  A(1,2) = 2
  A(2,1) = 3
  A(2,2) = 4
  B(1,1) = 1
  B(1,2) = 2
  B(2,1) = 0
  B(2,2) = 1
  detA = getdet(A,2)
  detB = getdet(B,2)
  WRITE (*,*) detA
  WRITE (*,*) detB
  END PROGRAM

其中getdet是用于计算方阵的行列式的标准外部子程序,如https://www.scribd.com/doc/46792210/FORTRAN77-Function-to-calculate-matrix-determinant中所述,存储在同一文件夹中的文件getdet.f中。

当我尝试使用命令

编译程序时
gfortran getdet.f test_matrix.f -o test_matrix.out

两个决定因素的输出是

0.00000000
0.00000000

这显然是错误的。但是,如果我在程序文件getdet.f中添加行,以便每次从主程序getdet调用程序test_matrix.f时打印结果,那么我得到的就是

determinant is:  -2.0000000000000000
determinant is:   1.0000000000000000
0.00000000
0.00000000

清楚地表明,无论子程序计算的是什么,都不会反馈到主程序test_matrix.f

我是否以错误的方式链接了这些程序? (一些谷歌搜索建议这是链接多个源代码文件的方法。)我该如何解决这个问题?提前全部谢谢。

0 个答案:

没有答案