HDF5: сборка библиотек на Фортране (Windows) - PullRequest
2 голосов
/ 30 сентября 2019

Прежде всего, я прочитал похожий вопрос StackOverflow здесь , но это не решило мою проблему.

Я хотел бы использовать файлы HDF5 в своих проектах на Fortran-2008, поэтому мне нужно получить файлы статических и динамических библиотек HDF5 для их использования.

Что я уже сделал:

  1. Я скачал и установил HDF5 Windows 10 x64 VS15двоичный файл с официального веб-сайта HDF5 ( здесь ).

  2. Я протестировал его, выполнив эту команду в консоли Windows: h5dump.exe. Работает хорошо!

  3. Итак, я скопировал один базовый пример Фортрана HDF5 и вставил его в новый проект Visual Studio Fortran. Пример исходного кода на Fortran ( здесь )
  4. Затем в поле 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 вставьте ТОЛЬКО hdf5_fortran.lib

Я сделал все эти конфигурации для All Configurations и All Platforms. Моя активная среда VS - Debug - x64.

Проблема

Я щелкнул правой кнопкой мыши в имени решения Fortran и "Build", но я получил следующие ошибки компоновщика:

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». Есть ли проблемы с использованием этих библиотек C и Fortran HDF5 внутри Visual Studio 2019 x64 ?

Моя система:

  • 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 Ответ

1 голос
/ 06 октября 2019

Каталог include для модуля HDF5 Fortran предназначен для статически связанной формы библиотеки, но вы затем указали файл lib для динамически связанной (общей) формы.

Если вы хотите динамическисвязанной формы библиотеки, затем измените путь включения на C:\Program Files\HDF_Group\HDF5\1.10.5\include\shared. (Если вы используете динамическое связывание, помните, что установка HDF5 включает в себя копии библиотек времени исполнения Fortran из версии компилятора, использованной для компиляции HDF5. Если версия компилятора, использованного для компиляции HDF5, старше, чем версия, которую вы используетедля остальной части вашей программы это вызовет проблемы.)

Если вам нужна статически связанная форма библиотеки, измените библиотеки на вариант libhdf_fortran.lib. Вам также необходимо добавить к этой ссылке другие библиотеки libhd5 *.

(Динамическая / статическая форма для библиотеки времени выполнения C также должна соответствовать параметру, установленному при компиляции статических библиотек HDF5.)

...