Bind(c) for procedures with complicated derived types
Steve Kargl
sgk@troutmask.apl.washington.edu
Wed Jun 3 20:02:00 GMT 2009
On Wed, Jun 03, 2009 at 02:05:33PM -0500, John McFarland wrote:
> MODULE fmod
>
> TYPE Object
> REAL*8, POINTER :: x(:)
> END TYPE Object
>
> CONTAINS
>
> FUNCTION object_size() RESULT(osize)
> INTEGER :: osize
> TYPE (Object) :: o
> osize = sizeof(o)
> END FUNCTION object_size
>
> SUBROUTINE init_object(o,n,val)
> TYPE (Object) :: o
> INTEGER, INTENT(in) :: n
> REAL*8, INTENT(in) :: val
>
> ALLOCATE( o%x(n) )
> o%x = val
> END SUBROUTINE init_object
>
> SUBROUTINE print_object(o)
> TYPE (Object) :: o
>
> PRINT*, o%x
> END SUBROUTINE print_object
>
> END MODULE fmod
REMOVE:kargl[131] gfc43 -S -o - d.f90 | sed s/__fmod_MOD_/_Oh_My_/g | as -o d.o
REMOVE:kargl[132] nm d.o
0000006e T _Oh_My_init_object
00000187 T _Oh_My_object_size
00000000 T _Oh_My_print_object
U _gfortran_os_error
U _gfortran_runtime_error
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_array
U malloc
Of couse, the use of fmod.mod still mangles the name to refers
__fmod_MOD_init_object, etc if fmod is used in other Fortran code,
so your *.o file is useless.
--
Steve
More information about the Fortran
mailing list