2

我尝试编译我的顾问给我的 fortran 程序。

当我在 Mac OS X 10.8.4 上使用 gfortran 4.7.2 和在 Arch Linux x64 上使用 gfortran 4.8.1 时,它不想编译。

我已经构建了重放错误的最小工作示例。可惜反正还是挺大的,所以我放到了github上:https ://github.com/kabanovdmitry/vode-test

我可以在 Ubuntu 12.04 下使用 gfortran 4.6.3 编译此代码。

我检查了 GCC 4.7 的新闻稿,没有发现任何可以给我线索的东西。

您能否解释一下为什么 gfortran 不想编译这段代码?

抱歉,最初忘记将错误放在这里:

main.f90:8.75:

    call vode(istate, lambda_fcn, dummy_jac, lambda, x_tmp, x_end, tol, pm)
                                                                       1
Error: There is no specific subroutine for the generic 'vode' at (1)
make: *** [all] Error 1
4

1 回答 1

5

我的回答及其在乔治引用的问题中的评论涵盖了您的问题。参数的类型、种类和等级完全匹配。要添加一些新的东西,我建议你尝试直接调用特定的过程。然后类型检查器将抱怨错误的实际参数,您将看到更多详细信息。

在你的情况下

generic2.f90:81.24:

call d_vode(istate, lambda_fcn, dummy_jac, lambda, x_tmp, x_end, tol, pm)
                    1
Error: Interface mismatch in dummy procedure 'f' at (1): Shape mismatch in dimension 1 of argument 'y'

这是不言自明的。您的虚拟程序与您的接口不兼容。您正在混合假定大小和恒定大小以及显式大小的数组。您必须完全按照界面进行操作。

于 2013-06-27T11:52:21.317 回答