Re: linking netcdf on Linux

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.F
pgf90 -o mkcdf mkcdf.o mkncfile.o rdmgcm.o -L/opt/local/lib -lnetcdf
mkncfile.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
        else
write(6,"('Created netcdf file ',a,' ncid=',i8)") | trim(fileout),ncid
        endif
endif 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


  • 2003 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: