Using objdump to view characters, we see
0000000000000000 g O .bss 000000000000000c __mymodule_MOD_aa
You need to add bind(C) to your aa variable
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
now $ objdump -t fortrancode.o says
000000000000000c O *COM* 0000000000000004 aa
and
#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; }
and
$ ./myprogram hello world from C hello world from Fortran 90 1.000000 2.000000 3.000000
source share