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