CMake的发现HDF5而是试图在Windows DLL对链接

问题描述 投票:1回答:1

我用find_package(HDF5 COMPONENTS CXX REQUIRED)在我的CMake的脚本加载包括目录和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的错误还是我设置什么了吗?

c++ dll visual-studio-2015 cmake
1个回答
2
投票

我没有用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的旧的或更新的版本(他们改变在新版本图书馆变种名称 - 检查所使用,以确保你让他们权利的人 - 我从内存中这样做可能犯了个错误)

编辑:如果manaully指定库的选项是一个问题,再有就是如果你的HDF5库使用cmake生成makefilesetc编译使用FindPackage(HDF5 NO_MODULE)的选项。当使用NO_MODULE,查找包脚本将绕过findhdf5.cmake剧本,并寻找被放置在HDF5构建的相关子目录中的HDF5Config.cmake或HDF5-config.cmake文件/安装folfer。

这是跨平台的友好,为所有新版本的HDF5支持 - 只要他们使用cmake建成,而不是运行./configure ...

© www.soinside.com 2019 - 2024. All rights reserved.