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, > I am trying to build NETCDF 4.1.3, then linking to it from a Fortran > application which is built using ifort as follows: > > ifort -o gswp2data_my gswp2data_my.F90 -I/usr/local/netcdf/include > -L/usr/local/netcdf/lib -lnetcdf > > Fortunately, the data in the nc file can be obtained correctly. > > Then I transplant the code into another fortran program. This program > is compiled using ifort according to a Makefile file. > > The Makefile is: > > ifeq ($(LIS_ARCH),linux_ifc) > CPP := /lib/cpp > ifeq ($(LIS_SPMD),single) > FC := ifort > CC := gcc > > NETCDFLIB = /usr/local/netcdf/lib > NETCDFINC = /usr/local/netcdf/include > > CFLAGS := $(cpp_path) -c -g -static -DIFC -DLINUX > FFLAGS = $(cpp_path) -c -assume nounderscore -g -traceback -fpe0 > -nomixed_str_len_arg -names lowercase -convert big_endian -assume byterecl > -DIFC -I$(NETCDFINC) > LDFLAGS = -lm -L(NETCDFLIB) -lnetcdf The statement above looks wrong. Maybe it should instead be: LDFLAGS = -lm -L$(NETCDFLIB) -lnetcdf > else > FC := $(MPI_PREFIX)/bin/mpif90 > CPP := /lib/cpp > CFLAGS := $(cpp_path) -c -O2 > FFLAGS = $(cpp_path) -c -I$(MOD_ESMF)/$(ESMF_ARCH) -DHIDE_SHR_MSG > -DNO_SHR_VMATH -O > LDFLAGS = -L$(LIB_ESMF)/$(ESMF_ARCH) -lesmf -lmpich > endif > > When I compile the program, the following errors are: > > > -lm -L/usr/local/netcdf/lib -lnetcdf > readnc.o: In function `readnc': > readnc.o: In function `readnc': > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:149: undefined > reference to `netcdf_mp_nf90_open' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:152: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:155: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:158: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:161: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:165: undefined > reference to `netcdf_mp_nf90_inq_varid' > readnc.o:/home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:168: more > undefined references to `netcdf_mp_nf90_inq_varid' follow > readnc.o: In function `readnc': > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:175: undefined > reference to `netcdf_mp_nf90_inq_dimid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:178: undefined > reference to `netcdf_mp_nf90_inquire_dimension' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:182: undefined > reference to `netcdf_mp_nf90_close' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:186: undefined > reference to `netcdf_mp_nf90_inq_dimid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:188: undefined > reference to `netcdf_mp_nf90_inquire_dimension' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:192: undefined > reference to `netcdf_mp_nf90_close' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:196: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:199: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:202: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:206: undefined > reference to `netcdf_mp_nf90_inq_varid' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:210: undefined > reference to `netcdf_mp_nf90_inq_varid' > readnc.o:/home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:214: more > undefined references to `netcdf_mp_nf90_inq_varid' follow > readnc.o: In function `readnc': > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:229: undefined > reference to `netcdf_mp_nf90_get_var_2d_fourbytereal' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:233: undefined > reference to `netcdf_mp_nf90_get_var_2d_fourbytereal' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:237: undefined > reference to `netcdf_mp_nf90_get_var_2d_fourbytereal' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:242: undefined > reference to `netcdf_mp_nf90_get_var_2d_fourbytereal' > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:247: undefined > reference to `netcdf_mp_nf90_get_var_2d_fourbytereal' > readnc.o:/home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:252: more > undefined references to `netcdf_mp_nf90_get_var_2d_fourbytereal' follow > readnc.o: In function `ncfile_close': > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:575: undefined > reference to `netcdf_mp_nf90_close' > readnc.o: In function `check': > /home/chensh/liskf2/src/make/../baseforcing/nc/readnc.F90:589: undefined > reference to `netcdf_mp_nf90_strerror' > gmake: *** [LIS] Error 1 > cp: cannot stat `LIS': No such file or directory > > How I can revise the makefile, then I can compile the program successfully. I don't know, but make sure the Fortran units that call netCDF functions each have a use netcdf statement in the declarations. Also, you must be using the same Fortran compiler as was used in building the netCDF library, because the Fortran-90 module files are different for different Fortran compilers. --Russ Russ Rew UCAR Unidata Program address@hidden http://www.unidata.ucar.edu Ticket Details =================== Ticket ID: PKX-997551 Department: Support netCDF Priority: Normal Status: Closed