使用所有可用库编译Fortran netCDF程序

时间:2015-04-23 04:48:46

标签: compilation fortran netcdf

首先,我已阅读此主题,但我无法编译代码。 Compiling Fortran netCDF programs on Ubuntu

我在UBUNTU 14.04并编译了一个使用NetCDF的fortran程序。我有这样的编译错误:

terrain.f:(.text+0x17efd): undefined reference to 'ncopn_'
terrain.f:(.text+0x18111): undefined reference to 'ncopn_'
terrain.f:(.text+0x187cc): undefined reference to 'ncclos_'
terrain.f:(.text+0x187ea): undefined reference to 'ncclos_'

当然它说我没有netcdf fortran图书馆。但我根据这些网页安装了zlib,HDF5,netcdf C和netcdf Fortran,并禁用了共享和禁用dap选项。

http://www.unidata.ucar.edu/software/netcdf/docs/build_default.html http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-fortran-install.html

这是nc-config --libs命令的结果:

-L/usr/local/lib -L/usr/local -lnetcdf -lhdf5_hl -lhdf5 -ldl -lm -lz

这是nf-config --flibs命令的结果:

-L/usr/local/lib -lnetcdff -L/usr/local/lib -lnetcdf -lnetcdf -lhdf5_hl -lhdf5 -lz

使用此命令构建我的项目:

gfortran terrain.f -I/usr/local/include -L/usr/local/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lm -ldl

这有什么问题?

编辑:我在配置netcdf C和netcdf fortran时使用了--disable-netcdf-4选项,我可以编译我的代码。所以它是HDF5的一个问题。

1 个答案:

答案 0 :(得分:2)

这不是一个真正的答案,但你需要提供更多信息。写一个简单的程序,并向我们展示代码。然后向我们展示您尝试编译的命令。

以下是两个例子:

Fortran 77:

$ cat test_nc.f

      PROGRAM TEST_NC
      IMPLICIT NONE
      include 'netcdf.inc'
      INTEGER ncid, nc_err

      nc_err = nf_open('test.nc', nf_nowrite, ncid)
      nc_err = nf_close(ncid)
      END PROGRAM TEST_NC

$ gfortran test_nc.f -o test_nc `nf-config --fflags --flibs`

Fortran 90:

$ cat test_nc.f90
program test_nc
    use netcdf
    implicit none
    integer :: ncid, nc_err

    nc_err = nf90_open('test.nc', nf90_nowrite, ncid)
    nc_err = nf90_close(ncid)
end program test_nc

$ gfortran test_nc.f90 -o test_nc `nf-config --fflags --flibs`

这两个都在我的系统上编译而没有错误甚至是警告。