fortran90 - C调用Fortran子程序

标签 fortran90

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

我正在学习“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 输出。我需要调用子程序部分的帮助,我只是不知道从哪里开始:(

我只是需要帮助,任何人都会感激。

最佳答案

老实说,很难准确说出您的问题是什么。但这里有一个在我的 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_”。在某些系统上,您可能会看到“INCRMENT”、“_increment”或各种其他内容。回复:2)无论您使用什么编译器,信息都应该可用。变化很大。

关于fortran90 - C调用Fortran子程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487965/

相关文章:

arrays - 函数在Fortran中返回数组

performance - FORTRAN - 减少函数调用开销

matrix - 翻转矩阵 fortran

fortran - 简单读取函数错误

fortran90 - Fortran 中的 LAPACK/BLAS 矩阵乘法返回零

cuda - Runge-Kutta 4 与 CUDA Fortran

c - F90读取C数据文件

audio - 在 Fortran 90/95 中生成声音/蜂鸣声

arrays - 声明数组的不同语法 : with and without the dimension statement

fortran - 在 Fortran 中解析随机 "String + Integers"