C直接调用Fortran 非链接库方式

C与Fortran都是应用广泛的语言,由于二者语言特性的不同,应用的场合很有差异。C语言通常用于系统软件和一些应用软件的开发,而Fortran在高性能应用领域有很好的应用。对于通常的用户,接促C语言的较多,但是,C语言的开发者,有时还想利用高效的Fortran 数据包 或者是Fortran语言的开发者想借用C提供的强大辅助功能,为此,为了方便大家对二语言相互调用的学习。这里给出了一些简单的入门性技术介绍。

1.C调用Fortran

编辑Fortran源文件 add.f95
subroutine add(a, b, c)
    implicit none
    real:: a, b, c
    c = a + b
    write(*,*) a, '+', b, '=', c
    return
end subroutine add
编译 add.f95  
f95 -o add.o -c add.f95
编辑C 主程序main.c 
#include <stdio.h>

extern void add_(float *a, float *b, float *c);

int main(int argc, char *argvs[])
{
        float a, b, c;
        a = 5.0;
        b = 7.0;
        add_(&a, &b, &c);
        return 0;
}
声明你要调用的函数,这里注意,是add_,调用的时候用指针,即变量地址,你应该明白了Fortran的调用是改变参数值的。
编译与执行  
#gfortran -o main main.c add.o  
#./main  

NOTES; if you use the gcc tool, it will generate error  
#gcc -o main main.c add.o  
add.o: In function `add_’:  
add.f95:(.text+0x4c): undefined reference to `_gfortran_st_write’  
add.f95:(.text+0x69): undefined reference to `_gfortran_transfer_real’  
add.f95:(.text+0x87): undefined reference to `_gfortran_transfer_character’  
add.f95:(.text+0xa4): undefined reference to `_gfortran_transfer_real’  
add.f95:(.text+0xc2): undefined reference to `_gfortran_transfer_character’  
add.f95:(.text+0xdf): undefined reference to `_gfortran_transfer_real’  
add.f95:(.text+0xed): undefined reference to `_gfortran_st_write_done’  
collect2: ld returned 1 exit status  
Some Wrong with your PATH for you gcc library  
OK! you are clever and has known how  call fortran routines in the C progaram. Next part I show you how to call C routines in the Fortran program!  
使用CodeBlocks编译时,需要在LINKER选项中加入-lgfortran 编译选项,否则也会出现如上错误。

2.Fortran调用C函数 

编辑C源码add.c
#include <stdio.h>  
 
void add_(float *a, float *b, float *c)  
{  
        *c = *a + *b;  
        printf("%f + %f = %f\n", *a, *b, *c);  
}  
Notes The funtion name "add_"  
编译源代码  
# gcc -o add.o -c add.c
编辑fortran 主程序main.f95,编译和执行
PROGRAM MAIN  
  implicit none  
  real:: i, j, k  
  !  
  ! The first fortran program  
  !  
  i = 5.0  
  j = 8.0  
  call add(i, j, k)  
  stop  
end program MAIN  
NOTE 9 line
# gfortran -o main main.f95 add.o (or f95 -o main main.f95 add.o)  
# ./main  
5.000000 + 8.000000 = 13.000000  
OK. If you reach here, congratulations, you have learned how to call routines between C and fortran!




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值