Re: Mixing netCDF & HDF in same program

Harvey,

 If you compile the HDF libraries (MFHDF to be more specific) defining
"Has_NetCDF" (not sure about case) the names of all netcdf-2 functions
get changed, with some token pre-appended to it. (I found out about
this the hard way: my code also defined the macro "Has_NetCDF" and I
could not link to mfhdf). I never tried to use this to link hdf/netcdf
in the same program, but it appears that the hooks are there.

  Arlindo


> 
> This is a report on the modifications I had to make so the netCDF library
> had
> no names the same as those in the HDF library. (Initially there were lots of
> conflicts because
> HDF includes all the netcdf-2 names.)  I only wanted to use netcdf-3 names
> so it
> seemed reasonable to try to suppress the netcdf-2 names in the netcdf
> library. (I
> could have modified HDF rather than netCDF, but it turned out to be just a
> couple of hours
> work to do it this way.)
> 
> I ran configure with
> CPPFLAGS="-DNDEBUG -DNO_NETCDF_2" ./configure
> 
> I had hoped that this would suppress the generation of the version 2 stuff
> in v2i.c, but I had
> to insert several #ifndef commands to make this happen.  I found the only
> code in v2i.c which 
> needed to be retained was that for function nctypelen (which was supposed to
> disappear from
> version 3 if I remember correctly :-(  )
> 
> This left just ten conflicting names. So I changed these by inserting the
> following into nc.h:
> 
> /*
>  *    Redefine following names to avoid conflict with HDF names
>  */
> 
> #define nctypelen nc_nctypelen
> int nctypelen(nc_type type);
> 
> #define NC_begins nc_NC_begins
> #define NC_check_id nc_NC_check_id
> #define NC_computeshapes nc_NC_computeshapes
> #define NC_endef nc_NC_endef
> #define NC_findattr nc_NC_findattr
> #define NC_lookupattr nc_NC_lookupattr
> #define NC_lookupvar nc_NC_lookupvar
> #define NC_var_shape nc_NC_var_shape
> #define NC_varoffset nc_NC_varoffset
> 
> Finally, I found it useful to define a NULL data-type like the HDF type
> DFNT_NONE.
> So I added the following line defining dummy type NC_NAT to netcdf.h as
> follows:
> 
> /*
>  *  The netcdf external data types
>  */
> typedef enum {
>         NC_NAT =         0,      /* NAT = 'Not A Type' (c.f. NaN) */
>         NC_BYTE =       1,      /* signed 1 byte integer */
>         NC_CHAR =       2,      /* ISO/ASCII character */
>         NC_SHORT =     3,      /* signed 2 byte integer */
>         NC_INT =           4,      /* signed 4 byte integer */
>         NC_FLOAT =      5,      /* single precision floating point number */
>         NC_DOUBLE =   6       /* double precision floating point number */
> } nc_type;
> 
> I will send a copy of my modified code to Unidata.
> 
> Harvey Davies, CSIRO Atmospheric Research,
> Private Bag No. 1, Aspendale 3195
> E-mail: harvey.davies@xxxxxxxxxxxx
> Phone: +61 3 9239 4556
>   Fax: +61 3 9239 4444
> 
> 


-- 
Arlindo da Silva
dasilva@xxxxxxxxxxxxx

  • 2000 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: