- To: Ben Foster <foster@xxxxxxxxxxxx>
- Subject: Re: linking netcdf on Linux
- From: Doug Hunt <dhunt@xxxxxxxx>
- Date: Mon, 12 May 2003 13:36:31 -0600
Ben: Here is our install recipe for netCDF under redhat 7.2 or 7.3
using the Lahey F90 compiler. I think the portland group compilers work
similarly. The key flag is the -DpgiFortran flag. I found out about
this flag somewhere on the unidata web site, where numerous netCDF
compile recipes are kept.
Regards, Doug Hunt export FC=lf95 export CC=gcc export CPPFLAGS= '-DNDEBUG -DpgiFortran' export CXX=g++ export FFLAGS= '-I/usr/include -I/ops/tools/include' set ./configure --prefix=/ops/tools make make install Ben Foster wrote:
Hi netcdf group: We have installed netcdf 3.5 on a Linux system running RedHat 7.3. I am using pgf90 4.0-2 to compile a small f90 code, and am getting "undefined reference" errors: (sundog) foster : gmake pgf90 -c -I/opt/local/include rdmgcm.F pgf90 -c -I/opt/local/include mkcdf.F pgf90 -c -I/opt/local/include mkncfile.Fpgf90 -o mkcdf mkcdf.o mkncfile.o rdmgcm.o -L/opt/local/lib -lnetcdfmkncfile.o: In function `mkncfile_': mkncfile.o(.text+0x110): undefined reference to `nf_create_' mkncfile.o: In function `handle_ncerr_': mkncfile.o(.text+0x77a): undefined reference to `nf_strerror_' gmake: *** [mkcdf] Error 2(sundog) foster :I am using #include "netcdf.inc" in mkncfile.F, and it is apparently finding this file in /opt/local/include. The lib libnetcdf.a is in /opt/local/lib, and it has both nf_create and nf_strerror. I will attach the Makefile and mkncfile.F. Thanks for any suggestions, --Ben ----------------------------------------------------------------------- Ben Foster High Altitude Observatory (HAO)foster@xxxxxxxx phone: 303-497-1595 fax: 303-497-1589 Nat. Center for Atmos. Res. P.O. Box 3000 Boulder CO 80307 USA----------------------------------------------------------------------- ------------------------------------------------------------------------ # UNAMES = $(shell uname -s) #----------------------------------------------------------------------- ifeq ($(UNAMES),Linux) SHELL=/bin/csh EXEC = mkcdf FC = pgf90 #FFLAGS = -I/local/d/foster/netcdf-3.5.0/include #LIBS = -L/local/d/foster/netcdf-3.5.0/lib -lnetcdf FFLAGS = -I/opt/local/include LIBS = -L/opt/local/lib -lnetcdf LDFLAGS endif #----------------------------------------------------------------------- ifeq ($(UNAMES),SunOS) SHELL=/bin/csh EXEC = mkcdf FC = f90 FFLAGS = -I/opt/local/include LIBS = -L/opt/local/lib -lnetcdf LDFLAGS endif #----------------------------------------------------------------------- # .SUFFIXES: .F include Objects #OBJS = mkcdf.F rdmgcm.F mkncfile.F $(EXEC): $(OBJS) $(FC) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) include Depends .f.o: $(FC) -c $(FFLAGS) $< .F.o: $(FC) -c $(FFLAGS) $< ------------------------------------------------------------------------ ! subroutine mkncfile(fileout) implicit none #include "netcdf.inc" ! ! Args: character(len=*),intent(in) :: fileout ! ! Local: integer,save :: ncalls=0 integer :: istat,ncid character(len=120) :: char120 ! ncalls = ncalls+1 write(6,"('mkncfile: ncalls=',i4)") ncalls if (ncalls == 1) then istat = nf_create(fileout,NF_CLOBBER,ncid) if (istat /= NF_NOERR) then write(char120,"('Error return from nf_create for netcdf ', | 'file ',a)") trim(fileout) call handle_ncerr(istat,char120) ncid = 0 elsewrite(6,"('Created netcdf file ',a,' ncid=',i8)") | trim(fileout),ncidendifendif end subroutine mkncfile!------------------------------------------------------------------- subroutine handle_ncerr(istat,msg) implicit none #include "netcdf.inc" ! ! Handle a netcdf lib error: ! integer,intent(in) :: istat character(len=*),intent(in) :: msg ! write(6,"(/72('-'))") write(6,"('>>> Error from netcdf library:')") write(6,"(a)") trim(msg) write(6,"('istat=',i5)") istat write(6,"(a)") nf_strerror(istat) write(6,"(72('-')/)") return end subroutine handle_ncerr
-- dhunt@xxxxxxxx Software Engineer III UCAR - COSMIC, Tel. (303) 497-2611
- References:
- linking netcdf on Linux
- From: Ben Foster
- linking netcdf on Linux