在Windows下将预编译的HDF5库与CMake一起使用

时间:2019-02-07 14:01:34

标签: visual-studio cmake hdf5

我想在应该独立于平台的CMake项目中使用预编译的HDF5库。 Linux版本运行良好,在Windows下,不同系统上出现了不同的问题。

问题1:Windows Server 2008,Visual Studio Ultimate 2012上的问题

在此计算机上,CMake 3.7.2用于生成Visual Studio项目。这工作正常,已安装并找到HDF5库的1.8.18和1.10.1版本。在编译过程中会出现问题,找不到头文件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 :(得分:1)

此答案是评论意见的摘要,以供以后参考。感谢vre和HDF5论坛中的人们所做的贡献。

#1

这里的问题是Windows安装程序中的HDF5库已配置为假定存在某些头文件。可以调整某些定义以使其正确(请参见讨论in the HDF5 forum),但是干净的方法是从头开始编译HDF5库。

#2

这里没有解决方案。因此,我切换到CMake的模块模式,该模式在每个系统上都找到了HDF5库。

#3

PATH变量中有hdf5.dll的另一个版本。例如,MATLAB和ParaView会导致此类行为。解决方案可以是静态链接。为此,必须至少在编译时正确设置PATH。也许有CMake功能可以提供链接器的绝对路径。

仍然不确定什么是最好的解决方案,以安全地通过DLL地狱。我想这是一个相当普遍的问题,但是无论如何都欢迎使用指针。