This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
>To: "'address@hidden'" <address@hidden> >From: Jean-Baptiste Robertson <address@hidden> >Subject: AIX 4.2 / xlC bug (low) >Organization: . >Keywords: 199907021613.KAA19235 In the above message, you wrote: > I just began to use netcdf-3.4 on AIX-4.2 with the xlC-3.1 C++ > compiler. netcdf was installed with no problem on my system, but > when compiling my foo.cxx : > > > xlC -I/usr/local/netcdf-3.4/include -c foo.C > > I obtain : > > "/usr/local/netcdf-3.4/include/ncvalues.hh", line 51.9: 1540-030: > (S) The macro "name2" has already been defined. > > "/usr/local/netcdf-3.4/include/ncvalues.hh", line 51.9: 1540-378: > (I) "name2" is defined on line 29 of > "/usr/lpp/xlC/include/generic.h". > > and the same for the macros "declare" and "implement" > > -> it does no work. So either your "foo.cxx" file must #include <generic.h> or it must #include something else that #includes generic.h. Wherever it is, you could probably just delete the "#include <generic.h>" line, since all modern C++ compilers no longer need generic.h. The "generic.h" file used to be included with all C++ development environments; it defined macros that were used to "glue" tokens together to emulate the capabilities of templates. These macros had names such as "name2", "declare", and "implement". Since the netCDF C++ code was written before templates were widely available, it made use of these macros. With netCDF version 3.4, the "#include <generic.h>" was removed and the necessary macro definitions were just included, so it would work whether templates were supported or not. > I inserted "#ifndef GENERICH " in ncvalues.hh so that the macros are > not defined again if generic.h is already there. That solution will also work; it would be better if the macros in the ncvalues.hh file used less common names that didn't clash with the old generic.h names, or included something like your "#ifndef GENERICH" solution. Unfortunately, there was no standard macro defined in generic.h (for example, if you used the g++ compiler and libg++, it would have to be "#ifndef generic_h"). --Russ _____________________________________________________________________ Russ Rew UCAR Unidata Program address@hidden http://www.unidata.ucar.edu