standard question: function overload
- From: Christoph Arns <cha110@xxxxxxxxxxxxxxxxxxx>
- Date: Tue, 31 May 2005 15:13:22 +1000
Hi,
I have three modules of the following type,
module spt_it_i1 use precision, only: sp, dp, i4b, i2b, lgt, iw => i1b use edt_lscan, only: edt4 use int_ext_pol, only: hunt use neighbours, only: ijk use random, only: ran2 use util_args, only: assert use util_error, only: error implicit none logical(lgt), parameter :: output = .true. integer(i4b), allocatable, save :: hist(:) integer(iw), allocatable, save :: rad2(:) contains include "spt_it.i90" end module spt_it_i1
where iw points to 1,2,4 byte integer types (replace i1 by i2, i4 in the module). The include statement provides two functions from each of these modules, named spt_2d and spt_3d, thus each of these functions is now available as 1,2,4 byte integer type.
I now use these three modules to generate a publicly accessible function as follows:
module spt_it use precision use util_args, only: assert use spt_it_i1, only: spt_2d_i1 => spt_2d, spt_3d_i1 => spt_3d use spt_it_i2, only: spt_2d_i2 => spt_2d, spt_3d_i2 => spt_3d use spt_it_i4, only: spt_2d_i4 => spt_2d, spt_3d_i4 => spt_3d implicit none private public spt interface spt module procedure spt_2d_i1 , spt_3d_i1 module procedure spt_2d_i2 , spt_3d_i2 module procedure spt_2d_i4 , spt_3d_i4 end interface contains .... end module spt_it
This used to work fine on several platforms. Now I get with Intel8, Intel8.1, Intel9 on altix:
/opt/intel-fc/9.0.015/bin/ifort -o perm.ia64 -O2 sv_tensor.o perc_fire.o int_ext_pol.o phase_field.o sysdep_io.o util_iloc.o perm_call.o edt_lscan.o perc_com.o perm_type.o perm_view.o util_comp.o perm_proc.o perm_sub.o perm_prc.o phase_field_com.o edt_grow.o perm_coll.o util_error.o precision.o perm_stream.o partition.o crt_mop.o io_tomo_phs.o stats.o util_arth.o util_args.o neighbours.o minkowski.o random.o perc_burn.o spt_it_mod.o io_tomo_func.o spec_fun.o perm_com.o perm_eq.o perc_func.o lin_alg.o sorts.o util_copy.o spt_it.o util_vabs.o util_realloc.o util_outer.o perc_thres.o perm_lat.o util_swap.o -L/usr/local/netcdf-3.6.0-p1/Intel9/lib -lnetcdf
spt_it.o(.text+0x0): In function `spt_it_i1_':
: multiple definition of `spt_it_i1_'
spt_it_mod.o(.text+0x0): first defined here
ld: Disabling relaxation: it will not work with multiple definitions
spt_it.o(.text+0x40): In function `spt_it_i1_mp_spt_2d_':
: multiple definition of `spt_it_i1_mp_spt_2d_'
spt_it_mod.o(.text+0x40): first defined here
spt_it.o(.text+0xc1c0): In function `spt_it_i1_mp_ppos_':
that is, it fails on the link step?
Any help appretiated.
ta, Christoph
.
- Follow-Ups:
- Re: standard question: function overload
- From: Steve Lionel
- Re: standard question: function overload
- Prev by Date: Re: in defense of "star" notation
- Next by Date: Re: Nice to have feature in upcoming Fortran compilers...
- Previous by thread: calling Microsoft PlaySound routine from CVF
- Next by thread: Re: standard question: function overload
- Index(es):