[ncl-install] Unable to locate sd_nccreate

Craig Tierney Craig.Tierney at noaa.gov
Tue May 13 08:59:49 MDT 2008


Thanks for the detailed reply.  I didn't build the HDF4 library.  I will
update both Netcdf and HDF4, while following the pointers you provide below.

Craig


Rick Grubin wrote:
> Hi Craig
> 
> I'm going to break up your compile directive into pieces, as I hope that 
> will be easier to address a few things:
> 
>> I am getting closer to building ncl with ifort.  The latest problem is 
>> the following:
>>
>> ifort -nofor-main -ansi -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 
>> -O2     -o ncl   [...]
> 
>>  -L/opt/netcdf/3.6.1_intel_9.1/lib -L/opt/udunits/1.12.4/lib 
>> -L/opt/hdf4/2r1_intel_9.1/lib -L/opt/netcdf/3.6.1_intel_9.1/lib 
>> -lnetcdf   -lmfhdf -ldf
> 
> First, note that you have the netCDF library path here twice.  I don't 
> think it hurts anything, but it's not necessary.
> 
> Also, you have netCDF v3.6.1, which is relatively out of date.  The 
> current version is v3.6.3, and even v3.6.2 contains minor but important
> security improvements.
> 
> As well, you have HDF4 v.r1, which is also relatively out of date.  The 
> current version is v.r3 (HDF4.2r3).
> 
> It's not strictly necessary to update these external software libraries, 
> but I do wish to make you aware of newer versions.
> 
> 
>> ifort: Command line warning: ignoring unknown option '-ansi'
> 
> The Intel Fortran compiler doesn't recognize the option '-ansi'  ---  
> typically that's a C compiler directive.  It's not harmful, but not 
> necessary.
> 
> 
>> /opt/hdf4/2r1_intel_9.1/lib/libmfhdf.a(globdef.o)(.bss+0x0): multiple 
>> definition of `ncerr'
>> /opt/netcdf/3.6.1_intel_9.1/lib/libnetcdf.a(v2i.o)(.bss+0x0): first 
>> defined here
>> /opt/hdf4/2r1_intel_9.1/lib/libmfhdf.a(globdef.o)(.data+0x8): multiple 
>> definition of `ncopts'
>> /opt/netcdf/3.6.1_intel_9.1/lib/libnetcdf.a(v2i.o)(.data+0x0): first 
>> defined here
>> /opt/hdf4/2r1_intel_9.1/lib/libmfhdf.a(putget.o)(.text+0x0): In 
>> function `ncvarput1':
>> : multiple definition of `ncvarput1'
>>
>> .. a few things deleted....
> 
> These messages indicate that the link process is finding more than one 
> library that contains the above-mentioned symbols.  In this case, they 
> are first found in the netCDF library, and later in the HDF libraries 
> (libmfhdf.a in this case).  This occurs when HDF is built without 
> disabling its own version of netCDF.
> 
> HDF libraries contain their own netCDF functionality, which is an older 
> version of netCDF (before v3.6.x) built in.  For NCL to compile, link 
> and run properly, it's required that HDF be built by telling the build 
> process that you'll find that netCDF functionality elsewhere.  For 
> HDF4.2r1, there is a file called 'INSTALL' in the source directory that 
> discusses this process:
> 
>     To use the HDF/MFHDF libraries(libdf.a, libmfhdf.a) with the
>         original netCDF library(libnetcdf.a) the HDF/MFHDF distribution
>         must be compiled with the option '-DHAVE_NETCDF'. This will
>         rename the HDF version of the C-interface(ncxxx) of the netCDF API
>         to sd_ncxxx to avoid clashing with the original netCDF API from
>         libnetcdf.a. Currently there is no support for renaming the
>         netCDF Fortran interface stubs. As such the HDF/MFHDF distribution
>         must be compiled without fortran support. HDF Users can still 
> access
>         HDF/netCDF files through the SDxxx interface but not through the
>         ncxxx interface unless the renamed interface is used(sd_ncxxx).
> 
> Note that the errors below, which are telling you that the link process 
> cannot find symbols such as 'sd_nccreate,' are because your HDF 
> libraries were not built as described above.
> 
>> NclHDF.o(.text+0x1d): In function `HDFCreateFile':
>> : undefined reference to `sd_nccreate'
>> [...]
> 
> NCL calls the HDF/MFHDF libraries via the 'sd_<name>' interface,  and 
> because those functions weren't built into the libraries, they are 
> undefined to the linker.
> 
> 
>> If I remove the library mfhdf, I can get the duplicate symbol problem 
>> to go away.
>> However, I still cannot resolve missing references to sd_nccreate and 
>> the other sd_*
>> functions.   I grepped the HDF4 and NETCDF libraries, and I don't find 
>> them there.
> 
> You don't find the symbols in the HDF4 libraries because, as discussed, 
> they were not built into them.   Both the 'INSTALL' file included with 
> the HDF4 release, and the NCL documentation located at:
> 
>     http://www.ncl.ucar.edu/Download/build_from_src.shtml#HDF-4
> 
> should help you get through the build process for HDF4 correctly.  Once 
> you've build and installed HDF4 correctly, you can re-run the NCL make 
> process.  Please let us of know of any other questions.
> 
> 
> ----   
> Rick Grubin      NCAR/TDD/CISL/VETS
> Visualization + Enabling Technologies
> grubin at ucar.edu             303.497.1832
> 
> 


-- 
Craig Tierney (craig.tierney at noaa.gov)


More information about the ncl-install mailing list