C调用Fortran子例程

时间:2012-09-19 02:59:34

标签: fortran90

我是网站的新手,看起来这可能是一个获得一些提示和帮助的地方(如果有的话)。

我正在学习“C调用Fortran子程序”,我对C有所了解,但对Fortran知之甚少。

另外一面:我看了一些例子,并且能够编译一些。

否定方:我有些失落。我有一个主程序,可以使用C或Fortran 90,print_matrix.f和print_matrix.c进行设计。

在main.c程序中,
    - 填充矩阵大小为3到3的1-9的数组     - 调用c函数
    - 打电话给fortran subrountine

我已经有了人口稠密的一面(可能不准确),但我被困在了subrountine上。 fortran和C的输出必须相同,使用makefile通过print_matrix.f90和print_matrix.c输出。我需要帮助调用subrountine部分,我只是不知道从哪里开始:(

我只需要帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:4)

老实说,确切地说出你的问题是有点困难。但这是一个适用于我的linux机器的例子:

callf.c:

  #include<stdio.h>
  int main(int argc, char **argv) {
  int i=0;
  increment_(&i);
  printf("%d\n",i);
  return;
  }

increment.f90:

subroutine increment(n)
integer n
n=n+1
return
end subroutine

编译:

gcc -c callf.c
gfortran -c increment.f90
gcc callf.o increment.o -lgfortran

结果:

> ./a.out
1

两个难点是:1)获取函数调用的确切名称; 2)知道链接两个代码需要哪些标志。 Re:1)我知道使用“increment_”,因为在编译我的FORTRAN代码后,我在increment.o上运行了“nm”实用程序,发现对象的名称是“increment_”。在某些系统上,您可能会看到“INCREMENT”,“_increment”或其他各种事物。回复:2)您可以使用任何编译器的信息。它变化很大。