运行 Fortran 时出现未定义引用错误

问题描述 投票:0回答:1

我是一名使用 Fortran 的用户。我尝试使用 Fortran 来使用 netCDF,但我不断收到以下错误。

PROGRAM net1
        use netcdf

        IMPLICIT NONE

        CHARACTER(len = 256) :: fi
        REAL, ALLOCATABLE :: T2(:,:,:)

        INTEGER :: dx, dy
        INTEGER :: ncid, varid
        INTEGER :: start(3), cou(3)

        fi = "wrfout_d10_2016-10-06_00.nc"
        dx = 209
        dy = 209

        call check(nf90_open(fi, NF90_NOWRITE, ncid), "opening T2 file")
        call check(nf90_inq_varid(ncid, "T2", varid), "getting T2 varid")

        allocate(T2(0, dx, dy))
        start = [0, 0, 0]
        cou   = [0, dx, dy]

        WRITE(*, *) "Reading Grid T2"
        call check(nf90_get_var(ncid, varid, T2, start = start, count = cou), "reading T2")
        WRITE(*, *) "T2 : ", sum(T2) / size(T2)

        call check(nf90_close(ncid), "closing T2 file")
        deallocate(T2)
END PROGRAM



gfortran net1.f90 -I/home/lsh/WRF/Library/include -L/home/lsh/WRF/Library/lib -lnetcdff -L/home/lsh/WRF/Library/lib -lnetcdf -ldl -lm -lnetcdf -lhdf5_hl -lhdf5 -lz



/usr/bin/ld: /tmp/ccrMu0aM.o: in function `MAIN__':
net1.f90:(.text+0x184): undefined reference to `check_'
/usr/bin/ld: net1.f90:(.text+0x1c7): undefined reference to `check_'
/usr/bin/ld: net1.f90:(.text+0x5ca): undefined reference to `check_'
/usr/bin/ld: net1.f90:(.text+0x749): undefined reference to `check_'

第一部分是我做的Fortran代码,第二部分是我执行的命令,最后部分是发生的错误

不知道如何解决

fortran gfortran netcdf
1个回答
0
投票

缺少子程序检查定义

  SUBROUTINE check(status, msg)
        INTEGER, INTENT(IN) :: status
        CHARACTER(*), INTENT(IN) :: msg
    
        IF (status /= 0) THEN
            WRITE(*, *) "Error: ", msg
            STOP
        END IF
    END SUBROUTINE check
    
    PROGRAM net1
        use netcdf
    
        IMPLICIT NONE
    
        CHARACTER(len=256) :: fi
        REAL, ALLOCATABLE :: T2(:,:,:)
    
        INTEGER :: dx, dy
        INTEGER :: ncid, varid
        INTEGER :: start(3), cou(3)
        INTEGER :: status
    
        fi = "wrfout_d10_2016-10-06_00.nc"
        dx = 209
        dy = 209
    
        CALL check(nf90_open(fi, NF90_NOWRITE, ncid), "opening T2 file")
        CALL check(nf90_inq_varid(ncid, "T2", varid), "getting T2 varid")
    
        ALLOCATE(T2(0, dx, dy))
        start = [0, 0, 0]
        cou   = [0, dx, dy]
    
        WRITE(*, *) "Reading Grid T2"
        CALL check(nf90_get_var(ncid, varid, T2, start=start, count=cou), "reading T2")
        WRITE(*, *) "T2 : ", SUM(T2) / SIZE(T2)
    
        CALL check(nf90_close(ncid), "closing T2 file")
        DEALLOCATE(T2)
    END PROGRAM
© www.soinside.com 2019 - 2024. All rights reserved.