我正在使用F77代码,我在编译中遇到问题。我认为我已经缩小了问题的范围,但并不知道如何解决这个问题。
代码非常长,所以我会尝试使用我使用的小片段尽可能清晰。
错误如下:
/tmp/fort77-4812-1.c:2728:12: error: conflicting types for ‘func_’
doublereal func_(doublereal *e)
/tmp/fort77-4812-1.c:272:43:
注意:先前'func1_'的声明就在这里
extern /* Subroutine */ int func1_(), func2_();
^
其中func(n)是一些函数。 func1和func2都会发生这种情况,它们都具有相同的格式,它们的算术不同。
代码开头如下:
Implicit double precision(a-h,o-z)
...
//initialization of some Arrays & parameters
...
external func1,func2
...
...
...
function func1(n)
implicit double precision(a-h,o-z)
...
...
end
我认为外部试图将函数保持为int,但由于隐式double,它被定义为realdouble。
有什么想法吗?
答案 0 :(得分:0)
这看起来像是由您选择的编译器引起的错误,我假设它是f2c
,它是一个语言翻译器。问题是翻译没有正确处理external
属性声明,并且正在产生一个C语言变量声明,它不符合你的隐式输入规则(这似乎是我无法用f2c版本20060506重现的错误)。 / p>
我建议使用适当的Fortran编译器而不是f2c
。