我学习了如何在Fortran代码中使用C全局变量,如下例所示。但是如何在相反的方向上进行,即在Fortran中定义(并初始化)变量并使其可以被C访问?
/* C global variables */
int c_extern;
long myVariable;
!Fortran binding code
MODULE LINK_TO_C_VARS
USE ISO_C_BINDING
!Implicit label binding
!Bind variable C_EXTERN to c_extern
INTEGER(C_INT), BIND(C) :: C_EXTERN
!Explicit label binding
!Bind C2 to myVariable
INTEGER(C_LONG) :: C2
BIND(C, NAME='myVariable') :: C2
END MODULE LINK_TO_C_VARS
答案 0 :(得分:0)
随访:
感谢M.S.B.
我做了一些实验。我把C代码放在vars.c中,mod.f90中的Fortran代码。
gcc -c vars.c
nm vars.o
0000000000000004 C c_extern
0000000000000008 C myVariable
gfortran -c mod.f90
nm mod.o
0000000000000004 C c_extern
0000000000000008 C myVariable
然后,我将vars.c中的变量更改为extern
<<vars-ext.c>>
extern int c_extern;
extern long myVariable;
gcc -c vars-ext.c和nm vars-ext.o
U c_extern
U myVariable
gfortran可以成功地将mod.o与vars.o或vars-ext.o链接起来。看起来魔术在于“C”类符号。