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

Compilation 使用所有可用库编译Fortran netCDF程序,compilation,fortran,netcdf,Compilation,Fortran,Netcdf,首先,我读过这个主题,但我不能编译我的代码。 我在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_'

首先,我读过这个主题,但我不能编译我的代码。

我在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,根据这些带有disable shared和disable dap选项的网页

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

-L/usr/local/lib -L/usr/local -lnetcdf -lhdf5_hl -lhdf5 -ldl -lm -lz
-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
这是nf config-flibs命令的结果:

-L/usr/local/lib -L/usr/local -lnetcdf -lhdf5_hl -lhdf5 -ldl -lm -lz
-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
我使用以下命令生成项目:

-L/usr/local/lib -L/usr/local -lnetcdf -lhdf5_hl -lhdf5 -ldl -lm -lz
-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的一个问题

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

以下是两个例子:

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`

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

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

以下是两个例子:

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`

这两种代码在我的系统上编译时都没有错误甚至警告。

您能给我们看一下您的Fortran代码吗?或者更简单的例子?我的代码太长了。但我可以在其他一些系统上运行它,并且它有适当的包含。我现在在我的系统中运行它,没有安装hdf5和-disable-netcdf-4选项。有一件事可能是重复的,让我惊讶的是,引用是ncopn,而不是nf90\u open\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?或者更简单的例子?我的代码太长了。但我可以在其他一些系统上运行它,并且它有适当的包含。我现在在我的系统中运行它,没有安装hdf5和-disable-netcdf-4选项。有一件事可能会重复,让我惊讶的是,引用是ncopn,而不是nf90\u open\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。