Использование предварительно скомпилированных библиотек HDF5 с CMake под Windows - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы использовать предварительно скомпилированные библиотеки HDF5 в проекте CMake, который должен быть независимым от платформы.Версия для Linux работает очень хорошо, под Windows разные проблемы возникали в разных системах.

Вопрос № 1: Проблема в Windows Server 2008, Visual Studio Ultimate 2012

На этой машине CMake 3.7.2используется для генерации проекта Visual Studio.Это работает нормально, версии 1.8.18 и 1.10.1 библиотек HDF5 установлены и найдены.Проблема возникает во время компиляции, где заголовочный файл inttypes.h не найден.Этот заголовочный файл в некоторой степени относится к стандарту C99, который не поддерживается некоторыми версиями компилятора Visual Studio.Есть ли какие-либо способы решения этой проблемы?

Вопрос № 2: Проблема в Windows 10, Visual Studio Enterprise 2017

Здесь я установил HDF5 1.10.1 и CMake 3.10 и попытался собрать свой простойпример сценария CMake:

cmake_minimum_required(VERSION 3.2.2)
project(hdf5test)
find_package(HDF5 REQUIRED COMPONENTS C CXX NAMES hdf5)

Я следовал совету в USING_HDF5_CMake.txt и установил переменную среды HDF5_DIR.Но что бы я ни пытался, ошибка:

Не удалось найти файл конфигурации для пакета "HDF5", который совместим с запрашиваемой версией "".

Были рассмотрены следующие файлы конфигурации, ноне принимается: C: / Program Files / HDF_Group / HDF5 / 1.10.1 / cmake / hdf5-config.cmake, версия: 1.10.1 (64 бита)

всегда отображается.Теперь я запутался, похоже, что CMake был на правильном пути, но по какой-то причине проигнорировал правильную библиотеку.Есть идеи, почему это происходит?

Вопрос № 3: Проблема в Windows 10 (обновление)

Мне как-то удалось получить код, компилируемый на той же машине, что и в # 2.Быстрое решение состояло в том, чтобы использовать режим модуля CMake find_package (параметр NAMES активирует этот режим, после удаления этого параметра я мог сгенерировать и построить решение Visual Studio.

Затем я добавил короткий фрагмент кода C ++, которыйсоздает файл HDF5:

#include "H5Cpp.h"
int main(void)
{
    H5::H5File file("test.hdf", H5F_ACC_TRUNC);
}

Этот код компилируется, но при его запуске выдается ошибка:

Не удалось найти точку входа в процедуру H5Pset_virtual вбиблиотека динамических ссылок [...] \ hdf5_cpp.dll.

Есть идеи?

Похожие:

1 Ответ

0 голосов
/ 12 февраля 2019

Этот ответ является сводкой идей из комментариев для дальнейшего использования.Спасибо vre и людям на форуме HDF5 за их вклад.

# 1

Проблема заключалась в том, что библиотека HDF5 вУстановщик Windows был настроен так, что он предполагает наличие определенных заголовочных файлов.Можно настроить некоторые определения, чтобы получить его правильно (см. Обсуждение на форуме HDF5 ), но чистый способ - это скомпилировать библиотеку HDF5 с нуля.

# 2

Здесь нет решения.Поэтому я переключился в режим модуля CMake, который обнаружил библиотеку HDF5 в каждой системе.

# 3

В файле hdf5.dll была другая версияПеременная PATHMATLAB и ParaView например вызывают такое поведение.Решением может быть статическое связывание.Чтобы достичь этого, нужно правильно определить PATH как минимум во время компиляции.Может быть, есть функция CMake, которая дает абсолютный путь к компоновщику.

Все еще не уверен, что лучшее решение - это безопасно пройти через ад DLL.Думаю, это довольно общая проблема, но указатели приветствуются.

...