VS2019+ Intel Fortran (oneAPI)+HDF5库的安装+测试

最近需要读取hdf5文件(*.h5),处于对速度的追求,兼具VS调试程序的需要,使用Fortran+HDF5进行读写。

注意: 此处为动态库连接方式,静态库类似,差异主要为头文件有所差异。

参考网址:

  1. 使用Fortran+HDF扩展进行HDF文件读写 | Herrera Space
  2. visual studio - HDF5: Build Fortran libraries (Windows) - Stack Overflow
  3. HDF库使用环境搭建_xuyong7的博客-CSDN博客
  4. HDF5-Fortran: Visual Studio 2019 + Intel Fortran + Win10 x64 - HDF5 - HDF Forum
  5. IVF读取hdf5格式的数据-编程工具交流-专业Fortran论坛 -

环境: 

Windows10 64位(似乎没有32位Win10了吧)

Visual Studio 2019 Community Edition 

Intel oneAPI 2021

 

安装步骤:

1.  安装HDF5 Windows预编译包

从https://www.hdfgroup.org/downloads/hdf5/下载 hdf5-1.12.2-Std-win10_64-vs16.zip和hdf5plugin-1.12.2-win10_64-vs16.zip,这两个文件(需要注册帐号)。解压后安装

2.  新建一个空的Fortran 控制台解决方案

3.  在打开的解决,进行如下配置:

1) 由于安装的是64位的库,需要把活动窗口调整到64位。

 

 

2)在解决方案管理器,在所选的项目处右键,打开属性(Property)窗口,进行如下配置:

 

 

在属性窗口,点"Generial" => "Additional Include Directories",将HDF5动态库的include目录加入到其中 C:\Program Files\HDF_Group\HDF5\1.12.2\include\shared

 

 

点"Linker"=>"General"=>Additioal Library Directories",将HDF5的库路径目录加入到其中 C:\Program Files\HDF_Group\HDF5\1.12.2\lib

 

 

点"Linker"=>"Input"=>Additioal Dependencies",将HDF5的动态库名称加入到其中 
hdf_fortran.lib

 

 

 

3)创建源代码,将测试代码复制其中 

! ************************************************************
!
!  This example shows how to read and write data to a
!  dataset.  The program first writes integers to a dataset
!  with dataspace dimensions of DIM0xDIM1, then closes the
!  file.  Next, it reopens the file, reads back the data, and
!  outputs it to the screen.
!
!  This file is intended for use with HDF5 Library verion 1.8
!
! ************************************************************

PROGRAM main

  USE HDF5

  IMPLICIT NONE

  CHARACTER(LEN=14), PARAMETER :: filename = "h5ex_d_rdwr.h5"
  CHARACTER(LEN=3) , PARAMETER :: dataset = "DS1"
  INTEGER          , PARAMETER :: dim0     = 4
  INTEGER          , PARAMETER :: dim1     = 7

  INTEGER :: hdferr
  INTEGER(HID_T) :: file, space, dset ! handles
  INTEGER(HSIZE_T), DIMENSION(1:2)           :: dims = (/dim0, dim1/) ! size read/write buffer
  INTEGER         , DIMENSION(1:dim0,1:dim1) :: wdata, &  ! Write buffer 
                                                rdata     ! Read buffer
  INTEGER :: i, j
  !
  ! Initialize FORTRAN interface.
  !
  CALL h5open_f(hdferr)
  !
  ! Initialize data.
  !
  DO i = 1, dim0
     DO j = 1, dim1
        wdata(i,j) = (i-1)*(j-1)-(j-1)
     ENDDO
  ENDDO
  !
  ! Create a new file using the default properties.
  !
  
  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, hdferr)
  !
  ! Create dataspace.  Setting size to be the current size.
  !
  CALL h5screate_simple_f(2, dims, space, hdferr)
  !
  ! Create the dataset.  We will use all default properties for this
  ! example.
  !
  CALL h5dcreate_f(file, dataset, H5T_STD_I32LE, space, dset, hdferr)
  !
  ! Write the data to the dataset.
  !
  CALL h5dwrite_f(dset, H5T_NATIVE_INTEGER, wdata, dims, hdferr)
  !
  ! Close and release resources.
  !
  CALL h5dclose_f(dset , hdferr)
  CALL h5sclose_f(space, hdferr)
  CALL h5fclose_f(file , hdferr)
  !
  ! Now we begin the read section of this example.
  !
  !
  ! Open file and dataset using the default properties.
  !
  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, hdferr)
  CALL h5dopen_f (file, dataset, dset, hdferr)
  !
  ! Read the data using the default properties.
  !
  CALL h5dread_f(dset, H5T_NATIVE_INTEGER, rdata, dims, hdferr)
  !
  ! Output the data to the screen.
  !
  WRITE(*, '(/,A,":")') dataset
  DO i=1, dim0
     WRITE(*,'(" [")', ADVANCE='NO')
     WRITE(*,'(80i3)', ADVANCE='NO') rdata(i,:)
     WRITE(*,'(" ]")')
  ENDDO
  WRITE(*, '(/)')
  !
  ! Close and release resources.
  !
  CALL h5dclose_f(dset , hdferr)
  CALL h5fclose_f(file , hdferr)
END PROGRAM main
h5ex_d_rdwr.f90

 

 

4)编译,链接,运行。

 

 

注:安装文件中说动态链接库需要设置H5_BUILT_AS_DYNAMIC_LIB编译选项,我未加入这个选项也能运行。

如果需要设置此选项,可能是在"Properties“ => "Fortran"=>"General"=> “Preprocessor Definitions”这里,把H5_BUILT_AS_DYNAMIC_LIB粘贴进去(不确定是否正确)

 

附上相关说明(位于C:\Program Files\HDF_Group\HDF5\1.12.2\USING_HDF5_VS.txt)

***********************************************************************
*  HDF5 Build and Install Suggestions for Windows and Visual Studio   *
*                         (Full Version)                              *
***********************************************************************

These suggestions are for Visual Studio users.

Instructions for building and testing HDF5 applications using CMake can
be found in the USING_HDF5_CMake.txt file found in this folder.

NOTE: Building applications with the dynamic/shared hdf5 libraries requires
      that the "H5_BUILT_AS_DYNAMIC_LIB" compile definition be used.

The following two sections are helpful if you do not use CMake to build
your applications.

==============================================================================================
Using Visual Studio 2010 and above with HDF5 Libraries built with Visual Studio 2010 and above
==============================================================================================

   1. Set up path for external libraries and headers

      The path settings will need to be in the project property sheets per project.
      Go to "Project" and select "Properties", find "Configuration Properties",
      and then "VC++ Directories".

      1.1 If you are building on 64-bit Windows, find the "Platform" dropdown
          and select "x64".

      1.2 Add the header path to the "Include Directories" setting.

      1.3 Add the library path to the "Library Directories" setting.

      1.4 Select Linker->Input and beginning with the
          "Additional Dependencies" line, enter the library names. The
          external libraries should be listed first, followed by the HDF5
          library, and then optionally the HDF5 High Level, Fortran or C++
          libraries. For example, to compile a C++ application, enter:

          szip.lib zlib.lib hdf5.lib hdf5_cpp.lib


==========================================================================
Using Visual Studio 2008 with HDF5 Libraries built with Visual Studio 2008
==========================================================================

   2. Set up the path for external libraries and headers

      Invoke Microsoft Visual Studio and go to "Tools" and select "Options",
      find "Projects", and then "VC++ Directories".

      2.1 If you are building on 64-bit Windows, find the "Platform" dropdown
          and select "x64".

      2.2 Find the box "Show directories for", choose "Include files", add the
          header path (i.e. c:\Program Files\HDF_Group\HDF5\1.12.x\include)
          to the included directories.

      2.3 Find the box "Show directories for", choose "Library files", add the
          library path (i.e. c:\Program Files\HDF_Group\HDF5\1.12.x\lib)
          to the library directories.

      2.4 If using Fortran libraries, you will also need to setup the path
          for the Intel Fortran compiler.

      2.5 Select Project->Properties->Linker->Input and beginning with the
          "Additional Dependencies" line, enter the library names. The
          external libraries should be listed first, followed by the HDF5
          library, and then optionally the HDF5 High Level, Fortran or C++
          libraries. For example, to compile a C++ application, enter:

          szip.lib zlib.lib hdf5.lib hdf5_cpp.lib

========================================================================
3. Helpful Pointers
========================================================================

    3.1 FAQ

    Many other common questions and hints are located online and being updated
    in the HDF Knowledge Base, please see:

       https://portal.hdfgroup.org/display/knowledge/HDF+Knowledge+Base

************************************************************************
 Please send email to help@hdfgroup.org for further assistance.
USING_HDF5_VS.txt

 

posted @ 2022-07-06 10:08  chinagod  阅读(2645)  评论(0编辑  收藏  举报