2

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

我正在学习“C 调用 Fortran 子程序”,我对 C 有一定的了解,但对 Fortran 了解不多。

优点:我看过一些例子,并且能够编译一些。

负面的一面:我有些失落。我有一个可以使用 C 或 Fortran 90 以及 print_matrix.f 和 print_matrix.c 设计的主程序。

在 main.c 程序中,
- 填充大小为 3 x 3 的矩阵大小为 1-9 的数组
- 调用 c 函数
- 调用 fortran 子程序

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

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

4

1 回答 1

4

老实说,很难确切地说出你的问题是什么。但这是一个适用于我的 linux 机器的示例:

callf.c:

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

增量.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) 知道链接两个代码需要哪些标志。回复:1)我知道使用“increment_”,因为在编译我的 FORTRAN 代码后,我在 increment.o 上运行了“nm”实用程序,发现对象的名称是“increment_”。在某些系统上,您可能会看到“INCREMENT”、“_increment”或各种其他内容。回复:2)信息应该适用于您使用的任何编译器。它变化很大。

于 2012-09-19T19:49:54.063 回答