You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran调用netCDF时出现undefined reference to `check_'错误求助

Fortran调用netCDF时出现check_未定义引用的解决方法

我尝试用Fortran调用netCDF库编写程序,编译时执行指定命令,但出现undefined reference to '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)

        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_'

问题原因与解决方法

  • 问题根源:代码中调用的check子程序并非netCDF库自带函数,它是用于检查netCDF操作返回状态的自定义子程序,你未在代码中定义该子程序,导致链接阶段无法找到对应符号。
  • 解决步骤:在源代码中添加check子程序的定义,示例如下:
SUBROUTINE check(status, message)
    USE netcdf
    IMPLICIT NONE
    INTEGER, INTENT(IN) :: status
    CHARACTER(LEN=*), INTENT(IN) :: message
    
    IF (status /= nf90_noerr) THEN
        PRINT *, trim(message), " failed:"
        PRINT *, trim(nf90_strerror(status))
        STOP 1
    END IF
END SUBROUTINE check

将该子程序放在主程序PROGRAM net1之前,重新编译即可解决链接错误。

另外注意:netCDF Fortran接口的维度索引默认从1开始,你代码中start = [0,0,0]和T2(0, dx, dy)的设置可能不符合文件实际维度规则,建议确认目标nc文件的维度起始索引,避免读取数据异常。

内容的提问来源于stack exchange,提问作者gwnu_numerical

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:05:27