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.
Hi Kensuke, > I am rather a superficial user and I apologize if my description of > the problem is lacking. I recently upgraded netcdf on my computer to > version 4.2.1.1, and now I am having a problem compiling a program based > on NoahLSM. It was working fine previously, but I cannot tell which > version of netCDF I had before. The error message shows a long list of > "undefined reference to..." example of which is pasted below: > > ifort -o driver.exe module_sf_noahlsm.o module_model_constants.o > module_sf_urban.o kwm_date_utilities.o module_netcdf_io.o module_io.o > module_ascii_io.o module_sfcdif_wrf.o module_Noahlsm_utility.o carb.o > simple_driver.o -L/usr/local/lib -lnetcdff -lnetcdf > module_netcdf_io.o: In function `initialize_netcdf_output': > /home/ken/noahlsm-v3.3/simple_driver-v3.3/module_netcdf_io.f:41: undefined > reference to `netcdf_mp_nf90_create_' > /home/ken/noahlsm-v3.3/simple_driver-v3.3/module_netcdf_io.f:44: undefined > reference to `netcdf_mp_nf90_def_dim_' > > I installed netcdf-fortran-4.2 but that did not solve the problem. > I think I am using Intel Fortran Compiler for compiling noahLSM. After building netcdf-fortran-4.2 and before installing it, did you run "make check"? Did it succeed with all its tests? If not, we'll need more information about any tests that didn't work. If those tests worked and "make install" installed the netCDF library in /usr/local/lib, are you able to build one of the example Fortran programs from the source distribution, for example netcdf-fortran-4.2/examples/F77/simple_xy_wr.f ? To do this, it will help to look at the output of the nf-config program, that should have been installed in /usr/local/lib/bin/, if /usr/local/lib is where you installed netcdf-fortran. In particular, look at the output of nf-config --fflags --flibs and try using that in your compile command. If the library was installed as shared, but you may also need to add the location of the shared library to your LD_LIBRARY_PATH so the run-time loader can find it. As an example, I have the netcdf-4.2.1.1 C library installed in /usr/local and I specified --prefix=/usr/local for where to install the netcdf-fortran-4.2 libraries (--prefix=/usr/local/ is the default, so I could have omitted it). I then built the netCDF-fortran libraries with LD_LIBRARY_PATH=/usr/local/lib LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include ./configure --prefix=/usr/local Then I ran "make check" to make sure the library worked, and "make install" to install the netcdf-fortran libraries in /usr/local. Then the output of /usr/local/bin/nf-config --fflags --flibs was -g -O2 -I/usr/local/include -L/usr/local/lib -lnetcdff -L/usr/local/lib -lnetcdf -lnetcdf (the extra -lnetcdf on the end is a harmless bug). Then I compile the example program simple_xy_wr.f using those flags like this: gfortran simple_xy_wr.f -o simple_xy_wr `/usr/local/bin/nf-config --fflags --flibs` Then I ran the resulting program, after setting the LD_LIBRARY_PATH to where the libraries were installed, because otherwise the operating system only looks in standard places like /usr/lib: export LD_LIBRARY_PATH=/usr/local/lib ./simple_xy_wr and the output was *** SUCCESS writing example file simple_xy.nc! --Russ > My brief search told me to add -lnetcdff to the NETCDFLIB, but that did > not solve the problem. The location of NETCDFLIB is correct, unless I > am looking at a wrong file (user_build_options in noahLSM). > > Ken > > Russ Rew UCAR Unidata Program address@hidden http://www.unidata.ucar.edu Ticket Details =================== Ticket ID: LPX-911763 Department: Support netCDF Priority: Normal Status: Closed