[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netCDF #YWH-955421]: Error during "make check," NetCDF 4.2 Fortran libs, Janus supercomputer



Hi Dan.

> I finally got the Fortran libraries to compile.  When I added LIBS=-lnetcdf 
> and ran "make check" I received the following error: 
> /curc/tools/free/redhat_5_x86-64/szip-2.1/lib file not recognized: Is a 
> directory.  After I recompiled HDF5 and NetCDF C libraries without szip I 
> successfully built the NetCDF Fortran libraries; they now pass "make check."  
> Do you anticipate that our users will experience a significant loss of 
> functionality due to the absence of szip?

Glad to here the Fortran libraries work.  No, I don't anticipate any users will 
miss szip.  We intentionally don't support writing files
with szip compression through netCDF APIs due to patent restrictions on the 
szip software.  Having szip support in netCDF means
you can read data that has been compressed with szip by programs that use the 
HDF5 APIs.  I haven't heard of anyone using that
route to create szip-compressed HDF5 data that's accessible through netCDF-4 
APIs.  Creating files that way would not be easy,
as you would have to avoid HDF5 features not supported in the netCDF-4 data 
model (such as references, type attributes, non-
hierarchical groups, or user-defined primitive types) and you would have to 
create artifacts in netCDF-4 files that emulate features
HDF5 doesn't have, such as shared dimensions.

--Russ

> ________________________________________
> From: Unidata netCDF Support [address@hidden]
> Sent: Friday, June 29, 2012 2:04 PM
> To: Daniel Milroy
> Cc: address@hidden
> Subject: [netCDF #YWH-955421]: Error during "make check," NetCDF 4.2 Fortran 
> libs, Janus supercomputer
> 
> Dan,
> 
> > > Is there actually a netCDF library in that directory, with a name like 
> > > libnetcdf.a?  If not, it looks like there's a problem with the PATH you 
> > > used ...
> >
> > The contents of the directory are:
> > libnetcdf.a  libnetcdf.la  pkgconfig
> >
> > > Also, I see you've explicitly turned off shared libraries with the 
> > > "--disable-shared" configure option.  Have you tried building with shared 
> > > libraries?
> >
> > I've tried that, but "make" fails with a "no such file or directory" error. 
> >  I can't remember the file or directory in question, but it is the same 
> > error that NetCDF 4.1.3 throws when I try to build it with shared libraries 
> > .
> 
> Well, evidently the mpif90 Fortran compiler can't link with the libnetcdf.a 
> library.
> Some other things to try are
> 
> - Make sure the libnetcdf.a library is 64-bit, assuming that's what your 
> Fortran compiler
> expects to link with.  You can do that with the "file" command to see what 
> kind of
> object libnetcdf.a is.
> 
> - Look at how pkgconfig in that directory wants you to link use that library. 
>  For example,
> if that directory is <DIR>, try invoking
> 
> export PKG_CONFIG_PATH=<DIR>
> pkg-config --libs --cflags netcdf
> 
> to see if you need some flag you're not using.
> 
> - Look at config.log to see the actual source for the program with a call to
> nc_open, to see how mpif90 is being called to compile and lik with it.  There
> may be an error message in config.log providing more information than that 
> nc_open
> can't be found.  If you can play with mpif90 flags to get that example program
> linking, it will be easier to see what's needed to get the netcdf-fortran-4.2
> build to work.
> 
> Sorry, that's all I can think of at this point.  If you want to extract the 
> config.log
> output relevant to not finding nc_open, I can see if there's anything obvious 
> that jumps
> out at me.  Here's what is in config.log for finding a library containing 
> nc_open:
> 
> configure:19683: checking for library containing nc_open
> configure:19714: gcc -o conftest -g -O2 -I/usr/local/include  conftest.c  >&5
> /tmp/ccivm8m4.o: In function `main':
> /home/russ/nf/trunk/conftest.c:46: undefined reference to `nc_open'
> collect2: ld returned 1 exit status
> configure:19714: $? = 1
> configure: failed program was:
> | /* confdefs.h */
> | #define PACKAGE_NAME "netCDF-Fortran"
> | #define PACKAGE_TARNAME "netcdf-fortran"
> | #define PACKAGE_VERSION "4.2"
> | #define PACKAGE_STRING "netCDF-Fortran 4.2"
> | #define PACKAGE_BUGREPORT "address@hidden"
> | #define PACKAGE_URL ""
> | #define PACKAGE "netcdf-fortran"
> | #define VERSION "4.2"
> | #define TEMP_LARGE "."
> | #define STDC_HEADERS 1
> | #define HAVE_SYS_TYPES_H 1
> | #define HAVE_SYS_STAT_H 1
> | #define HAVE_STDLIB_H 1
> | #define HAVE_STRING_H 1
> | #define HAVE_MEMORY_H 1
> | #define HAVE_STRINGS_H 1
> | #define HAVE_INTTYPES_H 1
> | #define HAVE_STDINT_H 1
> | #define HAVE_UNISTD_H 1
> | #define HAVE_DLFCN_H 1
> | #define LT_OBJDIR ".libs/"
> | #define pgiFortran 1
> | #define NF_INT1_T byte
> | #define NF_INT2_T integer*2
> | #define NF_INT1_IS_C_SIGNED_CHAR 1
> | #define NF_INT2_IS_C_SHORT 1
> | #define NF_INT_IS_C_INT 1
> | #define NF_REAL_IS_C_FLOAT 1
> | #define NF_DOUBLEPRECISION_IS_C_DOUBLE 1
> | #define NCBYTE_T byte
> | #define NCSHORT_T integer*2
> | #define HAVE_NETCDF_H 1
> | /* end confdefs.h.  */
> |
> | /* Override any GCC internal prototype to avoid an error.
> |    Use char because int might match the return type of a GCC
> |    builtin and then its argument prototype would still apply.  */
> | #ifdef __cplusplus
> | extern "C"
> | #endif
> | char nc_open ();
> | int
> | main ()
> | {
> | return nc_open ();
> |   ;
> |   return 0;
> | }
> configure:19714: gcc -o conftest -g -O2 -I/usr/local/include  conftest.c 
> -lnetcdf   >&5
> configure:19714: $? = 0
> configure:19731: result: -lnetcdf
> 
> Note that it first reports it's not found, but then succeeds at linking, 
> using "-lnetcdf".
> 
> --Russ
> 
> > -----Original Message-----
> > From: Unidata netCDF Support [mailto:address@hidden]
> > Sent: Friday, June 29, 2012 11:31 AM
> > To: Daniel Milroy
> > Cc: address@hidden
> > Subject: [netCDF #YWH-955421]: Error during "make check," NetCDF 4.2 
> > Fortran libs, Janus supercomputer
> >
> > Dan,
> >
> > > The logs for "configure," "make" and "make check" are attached.
> >
> > In your configure output, the following lines means the header file for the 
> > netCDF C library is found, but not the library:
> >
> > > checking for netcdf.h... yes
> > > checking for library containing nc_open... no checking for
> > > nc_def_opaque... no checking for nccreate... no
> >
> > The location of the netCDF library should have been specified with the 
> > LDFLAGS environment variable, which I see you've set as
> >
> > > LDFLAGS=-L/curc/tools/x_86_64/rh5/netcdf/4.2/hdf5/1.8.8/openmpi/1.4.5/
> > > intel/12.1.4/lib
> >
> > Is there actually a netCDF library in that directory, with a name like 
> > libnetcdf.a?  If not, it looks like there's a problem with the PATH you 
> > used ...
> >
> > Also, I see you've explicitly turned off shared libraries with the 
> > "--disable-shared"
> > configure option.  Have you tried building with shared libraries?
> >
> > --Russ
> >
> > > -----Original Message-----
> > > From: Unidata netCDF Support [mailto:address@hidden]
> > > Sent: Wednesday, June 27, 2012 2:33 PM
> > > To: Daniel Milroy
> > > Cc: address@hidden
> > > Subject: [netCDF #YWH-955421]: Error during "make check," NetCDF 4.2
> > > Fortran libs, Janus supercomputer
> > >
> > > Dan,
> > >
> > > > I forgot to mention before that I had set PATH to include 
> > > > /curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bin, so in 
> > > > effect I've already tried that suggestion.  I downloaded and built 
> > > > netcdf-fortran-4.4-beta1.tar.gz using options identical to my previous 
> > > > attempt with NetCDF 4.2.  Unfortunately, "make check" fails with 
> > > > exactly the same error.
> > >
> > > OK, please send us the complete output of configure, make, and make 
> > > check, from the build with netcdf-fortran-4.2.
> > >
> > > We might be able to diagnose the problem from that.
> > >
> > > --Russ
> > >
> > > > -----Original Message-----
> > > > From: Unidata netCDF Support
> > > > [mailto:address@hidden]
> > > > Sent: Wednesday, June 27, 2012 1:24 PM
> > > > To: Daniel Milroy
> > > > Cc: address@hidden
> > > > Subject: [netCDF #YWH-955421]: Error during "make check," NetCDF 4.2
> > > > Fortran libs, Janus supercomputer
> > > >
> > > > Hi Dan,
> > > >
> > > > > Per request by NCAR, I've been attempting to build NetCDF 4.2 on the 
> > > > > Janus supercomputer (RHEL 5.6, kernel 2.6.18-238.12.1).  I had no 
> > > > > problems building the NetCDF 4.2 C libraries, but I can't get the 
> > > > > Fortran libraries to install.  Here are the options I've used to 
> > > > > build netcdf-fortran-4.2:
> > > > >
> > > > > CC=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bin
> > > > > /m
> > > > > pi
> > > > > cc
> > > > > FC=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bin
> > > > > /m
> > > > > pi
> > > > > f90
> > > > > F90=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bi
> > > > > n/
> > > > > mp
> > > > > if90
> > > > > F77=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bi
> > > > > n/
> > > > > mp
> > > > > if90
> > > > > CXX=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bi
> > > > > n/
> > > > > mp
> > > > > ic++
> > > > > MPICXX=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4
> > > > > /b
> > > > > in
> > > > > /mpic++
> > > > > MPICC=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/
> > > > > bi
> > > > > n/
> > > > > mpicc
> > > > > MPIF77=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4
> > > > > /b
> > > > > in
> > > > > /mpif77
> > > > > MPIF90=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4
> > > > > /b
> > > > > in
> > > > > /mpif90 CPPFLAGS="-DgFortran
> > > > > -I/curc/tools/x_86_64/rh5/netcdf/4.2/hdf5/1.8.8/openmpi/1.4.5/intel/12.1.4/include"
> > > > > LDFLAGS=-L/curc/tools/x_86_64/rh5/netcdf/4.2/hdf5/1.8.8/openmpi/1.4.
> > > > > 5/
> > > > > intel/12.1.4/lib
> > > > > LD_LIBRARY_PATH=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_int
> > > > > el
> > > > > -1
> > > > > 2.1.4/lib:/curc/tools/nonfree/redhat_5_x86_64/intel-12.1.4/compose
> > > > > r_
> > > > > xe
> > > > > _2011_sp1.10.319/debugger/lib/intel64:/curc/tools/nonfree/redhat_5
> > > > > _x
> > > > > 86
> > > > > _64/intel-12.1.4/composer_xe_2011_sp1.10.319/mkl/lib/intel64:/curc
> > > > > /t
> > > > > oo
> > > > > ls/nonfree/redhat_5_x86_64/intel-12.1.4/composer_xe_2011_sp1.10.31
> > > > > 9/
> > > > > co
> > > > > mpiler/lib/intel64:/curc/tools/free/redhat_5_x86_64/sun_jdk-1.6.0_
> > > > > 23 -x 86_64/lib:/curc/tools/free/redhat_5_x86_64/torque-2.5.8/lib
> > > > > FFLAGS=-I/curc/tools/x_86_64/rh5/netcdf/4.2/hdf5/1.8.8/openmpi/1.4
> > > > > .5
> > > > > /i
> > > > > ntel/12.1.4/include
> > > > >
> > > > > ./configure
> > > > > --prefix=/curc/tools/x_86_64/rh5/netcdf/4.2/intel/netcdf-4.2_intel-12.
> > > > > 1.4_hdf5-1.8.8_openmpi-1.4.5_fortran -disable-shared
> > > > >
> > > > > I can configure and make the Fortran libraries successfully, but the 
> > > > > following error is thrown during "make check:"
> > > > >
> > > > > [snip]
> > > > >
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:115: undefined 
> > > > > reference to `nc_get_vars_int'
> > > > > ../fortran/.libs/libnetcdff.a(fort-varsio.o): In function 
> > > > > `nf_put_vars_real_':
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:130: undefined 
> > > > > reference to `nc_put_vars_float'
> > > > > ../fortran/.libs/libnetcdff.a(fort-varsio.o): In function 
> > > > > `nf_get_vars_real_':
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:142: undefined 
> > > > > reference to `nc_get_vars_float'
> > > > > ../fortran/.libs/libnetcdff.a(fort-varsio.o): In function 
> > > > > `nf_put_vars_double_':
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:150: undefined 
> > > > > reference to `nc_put_vars_double'
> > > > > ../fortran/.libs/libnetcdff.a(fort-varsio.o): In function 
> > > > > `nf_get_vars_double_':
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:157: undefined 
> > > > > reference to `nc_get_vars_double'
> > > > > ../fortran/.libs/libnetcdff.a(fort-varsio.o): In function 
> > > > > `nf_put_vars_':
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:160: undefined 
> > > > > reference to `nc_put_vars'
> > > > > ../fortran/.libs/libnetcdff.a(fort-varsio.o): In function 
> > > > > `nf_get_vars_':
> > > > > /tmp/netcdf/netcdf-fortran-4.2/fortran/fort-varsio.c:163: undefined 
> > > > > reference to `nc_get_vars'
> > > > > make[2]: *** [nf_test] Error 1
> > > > > make[2]: Leaving directory `/tmp/netcdf/netcdf-fortran-4.2/nf_test'
> > > > > make[1]: *** [check-am] Error 2
> > > > > make[1]: Leaving directory `/tmp/netcdf/netcdf-fortran-4.2/nf_test'
> > > > > make: *** [check-recursive] Error 1
> > > > >
> > > > > What is causing this issue?
> > > >
> > > > I suspect it may be that the fortran/cfortran.h header file, used to 
> > > > handle differences in how C functions are called from Fortran for 
> > > > different compilers, is failing to provide the right macros for the 
> > > > mpif90 compiler you are using.
> > > >
> > > > One thing you could try is setting your PATH to include the directory 
> > > > in which the compilers are found, and just setting the environment 
> > > > variables that configure is using to the names of the executables, e.g.
> > > >
> > > > PATH=/curc/tools/free/redhat_5_x86_64/openmpi-1.4.5_intel-12.1.4/bin
> > > > :$
> > > > PATH
> > > > FC=mpif90
> > > > F90=mpif90
> > > > F77=mpif90
> > > > ...
> > > >
> > > > to see if that gets the right definitions of the cfortran.h macros.
> > > >
> > > > Alternatively, you could try the new beta release of the separate
> > > > Fortran package, that makes use of the Fortran-2003
> > > > C-interoperability features, assuming your
> > > > mpif90 compiler supports this.  That completely avoids the old 
> > > > cfortran.h macros.
> > > >
> > > > Just get this version of the netCDF-Fortran package:
> > > >
> > > > ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-4.4-beta1.tar.g
> > > > z
> > > >
> > > > also available as the beta release from the downloads page:
> > > >
> > > > http://www.unidata.ucar.edu/downloads/netcdf/netcdf-fortran/index.js
> > > > p
> > > >
> > > > In building it, just tell it where to find the installed netCDF-3 
> > > > libraries, with CPPFLAGS and LDFLAGS, as you did for the 
> > > > netcdf-fortran-4.2 package.
> > > >
> > > > Please let us know if that works.
> > > >
> > > > --Russ
> > > >
> > > >
> > > > Russ Rew                                         UCAR Unidata Program
> > > > address@hidden                      http://www.unidata.ucar.edu
> > > >
> > > >
> > > >
> > > > Ticket Details
> > > > ===================
> > > > Ticket ID: YWH-955421
> > > > Department: Support netCDF
> > > > Priority: Normal
> > > > Status: Closed
> > > >
> > > >
> > >
> > > Russ Rew                                         UCAR Unidata Program
> > > address@hidden                      http://www.unidata.ucar.edu
> > >
> > >
> > >
> > > Ticket Details
> > > ===================
> > > Ticket ID: YWH-955421
> > > Department: Support netCDF
> > > Priority: Normal
> > > Status: Closed
> > >
> > >
> > Russ Rew                                         UCAR Unidata Program
> > address@hidden                      http://www.unidata.ucar.edu
> >
> >
> >
> > Ticket Details
> > ===================
> > Ticket ID: YWH-955421
> > Department: Support netCDF
> > Priority: Normal
> > Status: Closed
> >
> >
> Russ Rew                                         UCAR Unidata Program
> address@hidden                      http://www.unidata.ucar.edu
> 
> 
> 
> Ticket Details
> ===================
> Ticket ID: YWH-955421
> Department: Support netCDF
> Priority: Normal
> Status: Closed
> 
> 

Russ Rew                                         UCAR Unidata Program
address@hidden                      http://www.unidata.ucar.edu



Ticket Details
===================
Ticket ID: YWH-955421
Department: Support netCDF
Priority: Normal
Status: Closed