我需要运行在此处找到的旧程序:http://netlib.sandia.gov/conformal/,其标题为“kirch1”。我完全没有运行fortran代码的经验,但我想从我的Mac OS X 10.10命令行中这样做。在旧代码上使用gfortran编译
我知道我的系统上安装了'gfortan'编译器,但我不确定这是不是像这个旧代码。当我运行gfortran KIRCH1.f
(该文件是上面的那个),我收到以下错误:
KIRCH1.f:266.8:
x(2) = -1. + dx
1
Warning: Array reference at (1) is out of bounds (2 > 1) in dimension 1
KIRCH1.f:200.21:
common /param1/ nq2,c2,x2(20),z2(20),qwork2(460),betam2(20)
1
Warning: Padding of 4 bytes required before 'c2' in COMMON 'param1' at (1); reorder elements or use -fno-align-commons
KIRCH1.f:285.21:
common /param1/ nq,c,x(20),z(20),qwork(460),betam(20)
1
Warning: Padding of 4 bytes required before 'c' in COMMON 'param1' at (1); reorder elements or use -fno-align-commons
Undefined symbols for architecture x86_64:
"_gaussj_", referenced from:
_qinitx_ in ccoKtvwZ.o
"_ns01a_", referenced from:
_ksolv_ in ccoKtvwZ.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
这个错误似乎是做在代码的语法?我怀疑代码本身有什么问题,所以我想它与我的代码系统解释有关(因为没有更好的方法来表示这个)
我没有Fortran编程经验,我应该提到。我究竟做错了什么?
编辑
正如埃德·史密斯 建议我跑gfortran sclibdbl.f KIRCH1.f
,但我仍然得到以下警告:
KIRCH1.f:266.8:
x(2) = -1. + dx
1
Warning: Array reference at (1) is out of bounds (2 > 1) in dimension 1
KIRCH1.f:200.21:
common /param1/ nq2,c2,x2(20),z2(20),qwork2(460),betam2(20)
1
Warning: Padding of 4 bytes required before 'c2' in COMMON 'param1' at (1); reorder elements or use -fno-align-commons
KIRCH1.f:285.21:
common /param1/ nq,c,x(20),z(20),qwork(460),betam(20)
1
Warning: Padding of 4 bytes required before 'c' in COMMON 'param1' at (1); reorder elements or use -fno-align-commons
那些第一件事情不是错误,而是警告(基于编写代码的旧方法)。您的错误来自链接器。为了解决这个问题,你需要找到一些指令:至少告诉你在哪里可以找到引用的其他函数/子程序。 – francescalus 2015-04-04 17:01:36
啊,我看到谢谢。这些子程序可以在http://www.netlib.org/conformal/sclibdbl找到。我需要做些什么来将它们连接在一起? – Jack 2015-04-04 17:05:50
链接的代码使用旧规则声明假定大小(伪参数)数组的维数为'1',例如:'double precision x(1)'。您可以放心地忽略该警告,关闭边界检查或将这些声明更改为'double precision x(*)'。 – agentp 2015-04-06 19:02:58