HDF5: 构建Fortran库 (Windows)

3
首先,我阅读了一个类似的 StackOverflow 问题,在这里(链接),但它并没有解决我的问题。
我想在我的Fortran-2008项目中使用HDF5文件,因此我需要获取静态和动态HDF5库文件来使用它们。
我已经做了什么:
1. 我从HDF5官方网站(链接)下载并安装了HDF5 Windows 10 x64 VS15二进制文件。
2. 我测试了运行在Windows控制台中的以下命令:h5dump.exe。它可以正常工作!
3. 所以我复制了一个基本的HDF5 Fortran示例,并将其粘贴到新的Visual Studio Fortran项目中。Fortran示例源代码(链接)
4. 然后,在项目属性 | Fortran | 常规 | 附加包含目录下,插入路径到hdf5.mod的位置:
C:\Program Files\HDF_Group\HDF5\1.10.5\include\static 5. 链接时,在项目 | 属性 | 链接器 | 常规 | 附加库目录下,插入.lib文件的位置。
C:\Program Files\HDF_Group\HDF5\1.10.5\lib 6. 然后,在项目属性| 链接器 | 输入 | 附加依赖项中,仅插入hdf5_fortran.lib即可。
我对所有配置和所有平台都进行了这些配置。我的活动VS环境是Debug-x64。
问题:
我右键单击Fortran解决方案名称并选择“生成”,但我收到了以下链接器错误:
unresolved external symbol H5GLOBAL_mp_H5T_NATIVE_INTEGER
unresolved external symbol H5GLOBAL_mp_H5FD_MEM_NTYPES_F
unresolved external symbol H5GLOBAL_mp_H5F_ACC_TRUNC_F

a) 现在我需要怎么做才能解决这个问题?

b) HDF5二进制安装程序名(hdf5-1.10.5-Std-win10_64-vs15.zip)在文件名中包含了 vs15。我不知道,但我认为它的意思是“Visual Studio 2015”。在Visual Studio 2019 x64中使用这些C和Fortran HDF5库会有任何问题吗?

我的系统配置:

  • Windows 10 x64
  • Visual Studio 2019 Enterprise
  • Intel Visual Fortran 2019

Fortran例程源代码:

! This example is used in the HDF5 Tutorial.

PROGRAM H5_CRTDAT

  USE HDF5 ! This module contains all necessary modules

  IMPLICIT NONE

  CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
  CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name

  INTEGER(HID_T) :: file_id       ! File identifier
  INTEGER(HID_T) :: dset_id       ! Dataset identifier
  INTEGER(HID_T) :: dspace_id     ! Dataspace identifier


  INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/4,6/) ! Dataset dimensions
  INTEGER     ::   rank = 2                        ! Dataset rank

  INTEGER     ::   error ! Error flag

  !
  ! Initialize FORTRAN interface.
  !
  CALL h5open_f(error)

  !
  ! Create a new file using default properties.
  !
  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)

  !
  ! Create the dataspace.
  !
  CALL h5screate_simple_f(rank, dims, dspace_id, error)

  !
  ! Create the dataset with default properties.
  !
  CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
       dset_id, error)

  !
  ! End access to the dataset and release resources used by it.
  !
  CALL h5dclose_f(dset_id, error)

  !
  ! Terminate access to the data space.
  !
  CALL h5sclose_f(dspace_id, error)

  !
  ! Close the file.
  !
  CALL h5fclose_f(file_id, error)

  !
  ! Close FORTRAN interface.
  !
  CALL h5close_f(error)

END PROGRAM H5_CRTDAT
1个回答

2
HDF5 Fortran模块的include目录适用于静态链接库的形式,但您指定的是动态链接(共享)库的lib文件。
如果您需要使用动态链接库,则将包含路径更改为C:\Program Files\HDF_Group\HDF5\1.10.5\include\shared。(如果您使用动态链接,则要注意HDF5安装包中包含了Fortran运行时库的副本,这些库是编译HDF5所使用的编译器版本的副本。如果用于编译HDF5的编译器版本比程序中其他部分所使用的版本旧,则会出现问题。)
如果您需要使用静态链接库,则将库更改为libhdf_fortran.lib变量。您还需要将其他libhd5*库添加到链接中。
(C运行时库的动态/静态形式也需要匹配静态HDF5库的编译设置。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接