簡體   English   中英

使用gfortran和gcc從c訪問fortran模塊數據

[英]access fortran module data from c using gfortran and gcc

我正在嘗試訪問fortran代碼中的模塊變量,從C調用它。我已經調用了一個子例程,但是無法調用變量。

module myModule
use iso_c_binding
implicit none
real(C_FLOAT) aa(3)
contains
subroutine fortranFunction() bind(C)

print *,"hello world from Fortran 90"
aa(1)=1.0;
aa(2)=2.0;
aa(3)=3.0;

end subroutine

end module

而C代碼是

#include "stdio.h"

extern void fortranfunction();
extern float mymodule_aa_[3];

int main()
{
printf("hello world from C\n");
fortranfunction();

printf("%f %f %f \n",aa[0],aa[1],aa[2]);
return 0;
}

我正在編譯

gcc -c ccode.c
gfortran -c fortrancode.f90
gcc fortrancode.o ccode.o -lgfortran -o myprogram

gcc以未定義的引用響應`aa'

我們看到使用objdump查看符號

0000000000000000 g     O .bss   000000000000000c __mymodule_MOD_aa

您需要將bind(C)添加到aa變量中

module myModule
use iso_c_binding
implicit none
real(C_FLOAT), bind(C) :: aa(3)
contains
subroutine fortranFunction() bind(C)

print *,"hello world from Fortran 90"
aa(1)=1.0;
aa(2)=2.0;
aa(3)=3.0;

end subroutine

end module

現在$ objdump -t fortrancode.o

000000000000000c       O *COM*  0000000000000004 aa

#include "stdio.h"

extern void fortranfunction();
extern float aa[3];

int main()
{
printf("hello world from C\n");
fortranfunction();

printf("%f %f %f \n",aa[0],aa[1],aa[2]);
return 0;
}

$ ./myprogram 
hello world from C
 hello world from Fortran 90
1.000000 2.000000 3.000000 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM