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.
>To: address@hidden >From: Neil Banas <address@hidden> >Subject: netCDF on MacOS X >Organization: U Washington >Keywords: 200204032115.g33LF4a29111 netCDF MacOS-X Hi Neil, > I've tried installing netCDF 3.5.0--the fortran interface--on my Mac (OS > 10.1) a few different ways and am having major problems with all of them. > Hope you can help. > > I've given a fair bit of detail below. > > -------------- > method 1: starting with the netCDF source > I follow the instructions given on the website for OS X with Fortran, set > the env variables CC, CPPFLAGS, FC, FFLAGS. > ./compile runs with no errors. I assume you mean "./configure" runs with no errors. > make gives this error: > error.c: In function `strerror': > error.c:24: conflicting types for `sys_errlist' > /usr/include/stdio.h:265: previous declaration of `sys_errlist' > This is a standard C library, right? I reinstalled the Apple Developer > Tools (which includes gcc) right before doing this, so I don't know why > this should fail. I just tried this with netCDF 3.5.0 on Mac OS X 10.1.3 and I couldn't reproduce the problem. I'm not sure how to find the version of the Developer Tools I'm using, but I wouldn't think it would matter much. Here's the version of gcc I'm using, if that's any help: $ /usr/bin/cc --version 2.95.2 And "uname -a" gives: $ uname -a Darwin mort.unidata.ucar.edu 5.3 Darwin Kernel Version 5.3: Thu Jan 24 22:06:02 PST 2002; root:xnu/xnu-201.19.obj~1/RELEASE_PPC Power Macintosh powerpc And here's the full info on /usr/include/stdio.h: $ ls -l /usr/include/stdio.h -r--r--r-- 1 root wheel 13954 Sep 9 2001 /usr/include/stdio.h You might check to make sure you've set CC, CPPFLAGS, FC, FFLAGS as environment variables rather than regular shell variables. For shell-specific details, see the section "Setting Environment Variables" in the INSTALL document (sorry if this is insulting, but I'm just trying to cover all possibilities). Anyway with these environment variable settings: CC=/usr/bin/cc CPPFLAGS=-Df2cFortran FC=/usr/bin/g77 FFLAGS=-w the .configure script succeeds with warnings about configure: warning: CC failed on test program configure: warning: Could not find working Fortran-90 compiler configure: warning: The Fortran-90 interface will not be built but it finds "c++" works and "make all" and "make test" succeed: Making `all' in directory /home/russ/netcdf/build/mort0/src/libsrc /usr/bin/cc -c -O -I. -Df2cFortran attr.c /usr/bin/cc -c -O -I. -Df2cFortran dim.c /usr/bin/cc -c -O -I. -Df2cFortran error.c /usr/bin/cc -c -O -I. -Df2cFortran -DVERSION=`cat ../VERSION` libvers.c MEMORY:1: warning: malformed floating constant /usr/bin/cc -c -O -I. -Df2cFortran nc.c ... Making `test' in directory /home/russ/netcdf/build/mort0/src/libsrc /usr/bin/cc -c -O -I. -Df2cFortran t_nc.c ar cru libnetcdf.a attr.o dim.o error.o libvers.o nc.o ncio.o ncx.o putget.o string.o v1hpg.o v2i.o var.o ranlib libnetcdf.a ... ./nctst > test.out *** C++ test successful *** Returning to directory /home/russ/netcdf/build/mort0/src > -------------- > method 2: netCDF binary from FINK > The netCDF package installs fine, and I get much farther this way. I can > compile the Fortran code written by ncgen, but can't link it to > libnetcdf.a. > Here's my test program. > program netcdftest > include 'netcdf.inc' > integer ncid, err > err = nf_open('samp.nc',nf_nowrite,ncid) > print *, nf_strerror(err) > end > Whether I compile this with Absoft Fortran 7.0 (f77), or with g77... > f77 -w -f -I/sw/include -L/sw/lib -lnetcdf netcdftest.f > ...I get the error > /usr/bin/ld: Undefined symbols: > _nf_open > _nf_strerror > When I split up the fortran-compilation and linking steps, the source > compiles fine, and the .inc file is included fine (no error on the > parameter nf_nowrite)--it's just a problem linking to the library. > > The odd thing is that the back-compatibility routines link, but run with > errors, in Absoft Fortran. When I change nf_open and nf_strerror to > nc_open and nc_strerror, the program runs, but gives the error > 246676 > When I change nc_open to ncopen, it gives the error > ncopen: filename "samp.nc(B??No such file or directory > as if the filename is getting passed to ncopen incorrectly. (By the way, I > know the file is good because I can open it with netCDF for Matlab.) We don't have access to an Absoft f77 compiler for Mac OS X, but have a report of success building with it on Mac OS X: http://www.unidata.ucar.edu/glimpse/netcdfgroup-list/1497 You might use the "nm" utility on your libnetcdf.a to see if the Fortran routines _nf_open etc. are actually there: $ nm -a libnetcdf.a | grep _nf_open 00000494 T _nf_open__ Note that if "make test" ran OK in the ncgen directory, then it did successfully compile an ncgen-generated Fortran 77 program that called some of the Fortran interface routines, such as nf_create() and that linked and ran successfully. That's what the "ncgen -f" test does. You could rerun that test and look carefully at the flags that the makefile used for linking to make sure you're using similar flags. You might have to modify the ncgen/Makefile to take out some of the leading "@" characters so those lines get printed out when you run "make test" or "make f-test" in the ncgen directory. > so: I feel like the FINK binary method is closer to working, but I can't > fathom how the library can be present and located and the routines inside > mostly _but not entirely_ inaccessible. I have the same problem when I use > the binary you provide at > ftp://ftp.unidata.ucar.edu/pub/binary/macosx_10.1-powerpc/ > (with the .inc file from the FINK download). > > any ideas? No, but I'd be interested in anything you find out. Were you letting fink build from source or just getting the fink-built binaries? In the latter case, you would probably have to be using the same C/Fortran compiler combination fink used in building the libraries ... --Russ _____________________________________________________________________ Russ Rew UCAR Unidata Program address@hidden http://www.unidata.ucar.edu