c++ - Cmake 找到 hdf5 但尝试链接到 Windows 上的 dll

标签 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 文件它位于另一个文件夹中,即:

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

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

最佳答案

我有一段时间没有在 Windows 上使用 hdf5,但我确实记得有一个错误导致它链接到 dll 而不是 lib。 您应该手动设置(通过命令行 cmake -D 方法,或通过 cmake gui) HDF5_hdf5_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5.lib HDF5_hdf5_cpp_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5_cpp.lib 等等 - 或者只是 HDF5_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5.lib HDF5_cpp_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5_cpp.lib 取决于你是旧版本还是新版本的 FindHDF5(他们在新版本中更改了库 var 名称 - 检查用于确保你正确使用的名称 - 我是从内存中这样做的,所以可能犯了一个错误)

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

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

关于c++ - Cmake 找到 hdf5 但尝试链接到 Windows 上的 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40635139/

相关文章:

c++ - g++ 可以检查抛出说明符吗?

c++ - 访问父类的成员 "Invalid use of non-static data member"C++

c++ - 外部 "C"DLL : Debug is OK, 发布抛出错误 C2059

c# - 在 C# 或 Java 中使用的 C++ DLL

c++ - 在 Qt 4.10.2 中创建 .exe 文件

visual-studio-2015 - 如何在 Visual Studio 2015 的类图中显示完整的方法签名?

android - CMake IF 条件返回错误结果

c++ - 面向对象的设计选择

visual-studio - 键盘输入在Visual Studio上不起作用

visual-studio - 卸载 visual studio 2015 shell(已隔离)