HDF5:构建 Fortran 库 (Windows)

Posted

技术标签:

【中文标题】HDF5:构建 Fortran 库 (Windows)【英文标题】:HDF5: Build Fortran libraries (Windows) 【发布时间】:2020-01-29 23:35:55 【问题描述】:

首先,我阅读了一个类似的 *** 问题here,但它并没有解决我的问题。

我想在我的 Fortran-2008 项目中使用 HDF5 文件,所以我需要获取静态和动态 HDF5 库文件来使用它们。

我已经做了什么:

    我从以下位置下载并安装了 HDF5 Windows 10 x64 VS15 二进制文件 HDF5 官方网站 (here)。

    我在 Windows 控制台中运行以下命令对其进行了测试: h5dump.exe效果很好!

    所以我复制了一个基本的 HDF5 Fortran 示例并将其粘贴到一个新的 Visual Studio Fortran 项目中。 Fortran 示例源代码 (here) 然后,在Project Properties | Fortran | General | Additional Include Directories 下插入hdf5.mod 位置的路径

C:\Program Files\HDF_Group\HDF5\1.10.5\include\static

    要链接,在Project | Properties | Linker | General | Additional Library Directories 下插入.lib 文件的位置路径。

C:\Program Files\HDF_Group\HDF5\1.10.5\lib

    然后,在Project | Properties | Linker | Input | Additional Dependencies 下插入ONLY hdf5_fortran.lib

我为All ConfigurationsAll Platforms 做了所有这些配置。 我的活动 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 企业版 英特尔 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】:

HDF5 Fortran 模块的包含目录用于库的静态链接形式,但您随后为动态链接(共享)形式指定了 lib 文件。

如果您想要库的动态链接形式,请将包含路径更改为C:\Program Files\HDF_Group\HDF5\1.10.5\include\shared。 (如果您使用动态链接,请注意 HDF5 安装包含来自用于编译 HDF5 的编译器版本的 Fortran 运行时库的副本。如果用于编译 HDF5 的编译器版本比您使用的版本旧对于您程序的其余部分,这将导致问题。)

如果您想要库的静态链接形式,请将库更改为 libhdf_fortran.lib 变体。您还需要将其他 libhd5* 库添加到链接中。

(C 运行时库的动态/静态形式也需要与编译静态 HDF5 库时的设置相匹配。)

【讨论】:

以上是关于HDF5:构建 Fortran 库 (Windows)的主要内容,如果未能解决你的问题,请参考以下文章

HDF5 用于使用 fortran 编写的数据文件

HDF5 库无法使用 -mcmodel=large 进行编译

在 Fortran 中获取 HDF5 文件名的长度?

在 fortran 中将写入附加到 hdf5 文件

如何使用 Fortran API 将字符串数组写入 HDF5 数据集?

在 Fortran 中读取 HDF5 数据集的子集时出现问题