Function 链接Fortran 77源代码和子程序
我正在尝试编译以下测试程序,名为Function 链接Fortran 77源代码和子程序,function,fortran,gfortran,fortran77,linker-errors,Function,Fortran,Gfortran,Fortran77,Linker Errors,我正在尝试编译以下测试程序,名为test\u 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) =
test\u 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
是一个用于计算平方矩阵行列式的标准外部子程序,如中所述,存储在同一文件夹中的文件getdet.f
当我试图用命令编译程序时
gfortran getdet.f test_matrix.f -o test_matrix.out
两个行列式的输出为
0.00000000
0.00000000
这显然是错误的。但是如果我在程序文件getdet.f
中添加行,这样每次从主程序test\u matrix.f
调用程序getdet
时,它都会打印结果,那么我得到的就变成了
determinant is: -2.0000000000000000
determinant is: 1.0000000000000000
0.00000000
0.00000000
这清楚地表明,无论子程序计算什么,都不会反馈到主程序test\u matrix.f
我是否以错误的方式链接了这些程序?(一些谷歌搜索建议这是链接多个源代码文件的方法。)我应该如何解决这个问题?提前感谢您。由于函数中的输出是
-2.0000000000000000
看起来您应该将函数声明为双精度,而不是真实的。你能测试一下吗?啊,我认为你完全正确。。。。应该在主程序中声明REAL*8
。现在它给了我正确的答案。这是一个考虑使用接口块的好时机,这样编译器就可以检查两次并告诉你编译的时间。也可以很好地从真实*8移到一个标准一致的声明变量的方式,函数中的输出是“代码>2 0000000000000000”/代码。将函数声明为双精度,而不是实数。你能测试一下吗?啊,我认为你完全正确。。。。应该在主程序中声明REAL*8
。现在它给了我正确的答案。这是一个考虑使用接口块的好时机,这样编译器就可以检查两次,并告诉你编译时的情况。从实际**转移到一个标准一致的声明变量的方法中也是很好的。