Cmake找到hdf5但尝试在Windows上链接dll

时间:2016-11-16 14:50:56

标签: c++ dll visual-studio-2015 cmake

我在CMAKE脚本中使用find_package(HDF5 COMPONENTS CXX REQUIRED)来加载HDF5的包含目录和库。 Cmake告诉我

Found HDF5: C:/Program Files/HDF_Group/HDF5/1.10.0/bin/hdf5_cpp.dll (found version "1.10.0") found components:  CXX

并生成我的visual studio解决方案。 我还使用${HDF5_LIBRARIES} ${HDF5_CXX_LIBRARIES}中存储的库作为我的目标,但是当我尝试构建它时,我收到链接错误LNK1107,说明文件为hdf5_cpp.dll

invalid or corrupt file: cannot read at 0x380

我认为这是因为visual studio试图直接链接到dll文件而不是另一个文件夹中的lib文件,即: / p>

C:\Program Files\HDF_Group\HDF5\1.10.0\lib

问题:这是FindHDF中的错误还是配置错误?

1 个答案:

答案 0 :(得分:2)

我有一段时间没在Windows上使用过hdf5,但我确实记得有一个错误导致它链接到dll而不是lib。 你应该手动设置(通过命令行cmake -D方法,或通过cmake gui) AppDomain.CreateDomain("sandbox"); 等 - 或者只是 AppDomain.CreateDomain("sandbox",null, info); 取决于你是否有较旧或较新版本的FindHDF5(它们在较新版本中更改库var名称 - 检查用于确保正确使用它们的那些 - 我从内存中执行此操作因此可能会出错)

编辑: 如果manaully指定libs的选项是一个问题,那么如果您的hdf5库是使用cmake生成的makefilesetc编译的,则可以选择使用FindPackage(HDF5 NO_MODULE)。 使用NO_MODULE时,查找包脚本将绕过findhdf5.cmake脚本并查找放置在hdf5构建/安装文件的相关子目录中的HDF5Config.cmake或hdf5-config.cmake文件。

这是跨平台友好的,所有较新的hdf5版本都支持 - 只要它们是使用cmake而不是./configure构建的......