使用静态链接编译hdf5项目

3
我正在尝试编译和链接使用HDF5库的项目。我使用的是Windows 10, VS2015 (C++编译器)和CMake。在链接过程中遇到了问题,出现了很多类似于以下错误: libhdf5_cpp.lib(H5Attribute.obj) : error LNK2001: unresolved external symbol _H5open
我正在编译32位应用程序,并使用HDF5软件包的32位预构建二进制文件。链接器正在尝试链接libhdf5_cpp.lib文件(根据HDF5主页上的说明应该是静态库)。我已经尝试了Release和Debug模式进行编译。我还尝试了动态链接,结果仍然出现相同的错误信息。
我花了相当长的时间去解决这个问题,但我不确定能否在合理的时间内自行解决。有没有人对如何继续处理有好的建议呢?
另外,CMake脚本和编译在Linux下运行良好,所以我猜测这可能与VS有关。

快速检查一下,我不知道你正在使用哪个版本的HDF5。可能你已经做过了,但是你是否仔细阅读并遵循了关于Visual Studio和Cmake以及设置的HDF5部分呢? https://support.hdfgroup.org/HDF5/faq/windows.html#cm-runapp
还有这个吗? http://hdf4.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.0-patch1/src/unpacked/release_docs/USING_HDF5_CMake.txt
- fedepad
最终,我成功编译了。解决方案是除了链接szip.lib和zlib.lib之外,没有其他方法。这在CMake指令中没有写明。但是,在有关使用VS进行编译的文档中有提到。无论如何,感谢您的帮助! - Carl
2个回答

1

对于我的问题,首先我下载了预编译的Windows 64位HDF5。使用Visual Studio 2015。 我发现有两种类型的.lib文件 一个以前缀“lib”开头,另一个没有前缀“lib”

enter image description here

我不理解它们的区别。

一开始,我将所有C++的.lib文件都链接了起来(不使用f90、fortran、JAVA等)。

编译器报告有重复的符号。然后我只链接了hdf5.lib和hdf5_cpp.lib(前面没有“lib”这个词)。

然后编译器报错“未定义的外部符号”。QT pro命令如下:

INCLUDEPATH +=   "C:/Program Files/HDF_Group/HDF5/1.10.2/include"
LIBS        += -L"C:/Program Files/HDF_Group/HDF5/1.10.2/lib"

LIBS        += -lhdf5
LIBS        += -lhdf5_cpp
LIBS        += -lhdf5_hl
LIBS        += -lhdf5_hl_cpp
LIBS        += -lhdf5_tools
LIBS        += -lszip
LIBS        += -lzlib

我遇到了和你一样的问题:"编译错误"

之后我链接了libhdf5.lib,libhdf5_cpp.lib... 在QT pro中使用以下命令:

INCLUDEPATH +=   "C:/Program Files/HDF_Group/HDF5/1.10.2/include"
LIBS        +=   -L"C:/Program Files/HDF_Group/HDF5/1.10.2/lib"
LIBS        += -llibhdf5
LIBS        += -llibhdf5_cpp
LIBS        += -llibhdf5_hl
LIBS        += -llibhdf5_hl_cpp
LIBS        += -llibhdf5_tools
LIBS        += -llibszip
LIBS        += -llibzlib

并且它有效。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接