HDF5:构建 Fortran 库 (Windows)
HDF5: Build Fortran libraries (Windows)
首先,我看了一个类似的 Whosebug 问题 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.10.5\include\static
- 至 link,在
Project | Properties | Linker | General | Additional Library Directories
下插入 .lib
文件位置的路径。
C:\Program Files\HDF_Group\HDF5.10.5\lib
- 然后,在
Project | Properties | Linker | Input | Additional Dependencies
下插入 ONLY hdf5_fortran.lib
我为 All Configurations
和 All Platforms
做了所有这些配置。
我的活动 VS 环境是 Debug - x64.
问题
我右键单击 Fortran 解决方案名称并 "Build",但我得到了这些 linker 错误:
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 企业
- 英特尔视觉 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
HDF5 Fortran 模块的包含目录用于库的静态 linked 形式,但是您随后为动态 linked(共享)形式指定了 lib 文件.
如果您想要库的动态 linked 形式,请将包含路径更改为 C:\Program Files\HDF_Group\HDF5.10.5\include\shared
。 (如果您使用动态 linking,请注意 HDF5 安装包括来自用于编译 HDF5 的编译器版本的 Fortran 运行时库的副本。如果用于编译 HDF5 的编译器版本早于您在程序的其余部分使用的版本,那么这将导致问题。)
如果您想要库的静态 linked 形式,请将库更改为 libhdf_fortran.lib
变体。您还需要将其他 libhd5* 库添加到 link。
(C 运行时库的 dynamic/static 形式也需要与编译静态 HDF5 库时的设置相匹配。)
首先,我看了一个类似的 Whosebug 问题 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.10.5\include\static
- 至 link,在
Project | Properties | Linker | General | Additional Library Directories
下插入.lib
文件位置的路径。
C:\Program Files\HDF_Group\HDF5.10.5\lib
- 然后,在
Project | Properties | Linker | Input | Additional Dependencies
下插入 ONLYhdf5_fortran.lib
我为 All Configurations
和 All Platforms
做了所有这些配置。
我的活动 VS 环境是 Debug - x64.
问题
我右键单击 Fortran 解决方案名称并 "Build",但我得到了这些 linker 错误:
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?
我的系统是:
- Windows 10 x64
- Visual Studio 2019 企业
- 英特尔视觉 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
HDF5 Fortran 模块的包含目录用于库的静态 linked 形式,但是您随后为动态 linked(共享)形式指定了 lib 文件.
如果您想要库的动态 linked 形式,请将包含路径更改为 C:\Program Files\HDF_Group\HDF5.10.5\include\shared
。 (如果您使用动态 linking,请注意 HDF5 安装包括来自用于编译 HDF5 的编译器版本的 Fortran 运行时库的副本。如果用于编译 HDF5 的编译器版本早于您在程序的其余部分使用的版本,那么这将导致问题。)
如果您想要库的静态 linked 形式,请将库更改为 libhdf_fortran.lib
变体。您还需要将其他 libhd5* 库添加到 link。
(C 运行时库的 dynamic/static 形式也需要与编译静态 HDF5 库时的设置相匹配。)