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

[netCDF #PKX-997551]: Build NetCDF using Intel ifort in Linux



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