【问题标题】:H5dread_f symbol missing in hdf5 (fortran) librarieshdf5 (fortran) 库中缺少 H5dread_f 符号
【发布时间】:2018-10-22 05:55:27
【问题描述】:

我在编译 WRF-DA 代码时遇到问题(代码为 here)

编译失败的行 -

ftn -c -ip -O3  -w -ftz -fno-alias -align all -FR -convert big_endian   -r8        -real-size `expr 8 \* 8` -i4 -I../external/crtm_2.2.3/libsrc   -I/opt/cray/pe/hdf5/1.10.0.3/INTEL/16.0/include   -L/opt/cray/pe/hdf5/1.10.0.3/INTEL/16.0/lib/  -lhdf5hl_fortran -lhdf5_fortran -lhdf5  da_radiance.f 

  da_radiance.f(5884): error #6285: There is no matching specific subroutine for this generic subroutine call.   [H5DREAD_F]
      call H5Dread_f(dhnd1, &
-----------^

我尝试在库中搜索相关符号,但正如预期的那样,该符号不存在(h5dread_f_c 存在)。

nm /opt/cray/pe/hdf5/1.10.0.3/INTEL/16.0/lib/libhdf5*|grep -i h5dread_f
nm: /opt/cray/pe/hdf5/1.10.0.3/INTEL/16.0/lib/libhdf5.settings: File format not recognized
nm: /opt/cray/pe/hdf5/1.10.0.3/INTEL/16.0/lib/libhdf5_cpp_intel_160.la: File format not recognized
                 U h5dread_f_c
                 U h5dread_f_c
0000000000001290 T h5dread_f_c
0000000000035320 T h5dread_f_c
                 U h5dread_f_c
                 U h5dread_f_c
0000000000001290 T h5dread_f_c
0000000000035320 T h5dread_f_c
                 U h5dread_f_c
                 U h5dread_f_c
0000000000001290 T h5dread_f_c
0000000000035320 T h5dread_f_c
0000000000035320 T h5dread_f_c
0000000000035320 T h5dread_f_c

我尝试编译 hdf5-1.10.2。快速浏览一下代码,我发现该函数似乎已在 fortran/src/H5Dff.F90 中声明(和注释)为 -

!  M. Scot Breitenfeld
!  September 17, 2011
!
! Fortran2003 Interface:
!!  SUBROUTINE h5dread_f(dset_id, mem_type_id, buf, hdferr, &
!!                       mem_space_id, file_space_id, xfer_prp)
!!    INTEGER(HID_T), INTENT(IN)              :: dset_id
!!    INTEGER(HID_T), INTENT(IN)              :: mem_type_id
!!    TYPE(C_PTR)   , INTENT(INOUT)           :: buf
!!    INTEGER       , INTENT(OUT)             :: hdferr
!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: mem_space_id
!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: file_space_id
!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: xfer_prp
!*****
  SUBROUTINE h5dread_ptr(dset_id, mem_type_id, buf, hdferr, &
       mem_space_id, file_space_id, xfer_prp)

此功能是否已在 HDF5 的最新版本中被淘汰? 如果是,那么请为 HDF5 共享一个适当(旧)版本的库(和相关编译标志),我可以在其中找到这个符号。

如果我可以提供任何进一步的信息,请告诉我。

【问题讨论】:

    标签: hdf5 hdf


    【解决方案1】:

    h5dread_f 是一个接口,它映射到以下之一

    INTERFACE h5dread_f
       MODULE PROCEDURE h5dread_reference_obj
       MODULE PROCEDURE h5dread_reference_dsetreg
       MODULE PROCEDURE h5dread_char_scalar
       MODULE PROCEDURE h5dread_ptr
    END INTERFACE
    

    似乎有无效的类型被传递到函数中。

    (感谢 HDF5 小组的 Dave Allured)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-29
      • 2019-02-11
      • 2016-05-20
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多