NSF Unidata

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

[netCDF #CXR-134834]: linking netCDF library with program written in Fortran

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 Ana,

Sorry to have taken so long to respond to your question ...
> I have installed the following libraries on my MacBook Pro (OS X 10.8.2) 
> using MacPorts:
> 
> - netcdf @4.2.1.1
> - netcdf-cxx @4.2
> - netcdf-fortran @4.2
> 
> I need to pass the information about the netcdf interface to JULES
> program written in Fortran and in the user manual the following option
> is suggested:
> 
> make COMPILER=gfortran BUILD=run CDF_LIB_PATH=/opt/local/lib \
> CDF_MOD_PATH=/opt/local/include
>
> The values for these options are the directories in which the pre-compiled
> netCDF library (libnc.a) and Fortran 90 module files (those with .mod
> extension) are located respectively. However, in my lib directory I don't
> have libnc.a library, only libnetcdf_c++.a and libnetcdf.a libraries. 

NetCDF doesn't install any library named "libnc.a", only libnetcdff.a (for 
Fortran),
libnetcdf.a (for C), and libnetcdf_c++.a, for C++.  You generally don't need the
C++ library, unless JULES requires it for some reason.  The Fortran netCDF 
library
calls the C library, so you generally need to link Fortran applications with 
both,
as your output from nc-config --flibs shows.  The Makefile also must know where 
the
netcdf.h, netcdf.inc, and netcdf.MOD files are, usually all in the same 
include/ 
directory

> ... In
> my include directory I have NETCDF.mod and TYPESIZES.mod files. Now, when
> I run the above given command in my Terminal, I get the following error:
> ….
> ….
> gfortran -c -fbounds-check rwerr_mod.f90 -J/Users/Nana/JULES/jules_v2.2/MODS 
> -I/Users/Nana/JULES/jules_v2.2/MODS -I/Users/Nana/netcdf/include 
> -I/Users/Nana/JULES/jules_v2.2/UTILS/drhook_dummy
> Fatal Error: Reading module netcdf at line 25 column 2: Expected string
> make[1]: *** [/Users/Nana/JULES/jules_v2.2/libjules.a(rwerr_mod.o)] Error 1
> make: *** [make_SOURCE/MODULES/CONTROL] Error 2

The format of .mod module files is compiler-specific, so if you used a 
different Fortran
compiler than gfortran (or even an earlier version) when you built the netCDF 
Fortran-90
library from source, it might generate such an error.  Also if you just copied 
the .MOD
file into the /Users/Nana/netcdf/include directory from a different directory 
where it was
built for a different platform or compiler, you would see such an error.

Otherwise, I don't know what would cause this.

> When I run nc-config --flibs, I get the following information:
> 
> -L/opt/local/lib -lnetcdff -L/opt/local/lib -lnetcdf -lnetcdf
> 
> and for nc-config --includedir
> 
> /opt/local/include
> 
> Do you have an idea what I could do to fix this?

I suspect you would might better advice asking the JULES help-desk or 
support about this problem, since it may be related to something in
the JULES Makefile.

--Russ

Russ Rew                                         UCAR Unidata Program
address@hidden                      http://www.unidata.ucar.edu



Ticket Details
===================
Ticket ID: CXR-134834
Department: Support netCDF
Priority: High
Status: Closed