使用静态链接编译hdf5项目

时间:2016-12-15 15:21:25

标签: c++ static-libraries hdf5

我正在尝试编译和链接使用HDF5库的项目。我使用的是Windows 10,VS2015(C ++编译器)和CMake。我在链接过程中遇到了问题,并且遇到了很多错误,比如

  

libhdf5_cpp.lib(H5Attribute.obj):错误LNK2001:未解析的外部符号_H5open

我正在编译一个32位应用程序,我使用HDF5软件包的32位预构建二进制文件。链接器正在尝试链接libhdf5_cpp.lib文件(根据HDF5主页应该是静态库)。我在编译期间尝试了Release和Debug模式。我还试图动态链接,这导致了相同的错误消息。

我现在已经花了很长时间,我不确定我会在合理的时间内自己解决这个问题。有没有人对热点有任何好的建议?

是的,CMake脚本和编译在Linux下运行良好,所以我猜这与VS有关。

2 个答案:

答案 0 :(得分:0)

这似乎与此处的问题相似:
Linking HDF5 library into Visual C++ DLL project: unresolved external symbol __imp__*
因此,遵循那些建议的那些步骤与我在官方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

答案 1 :(得分:0)

对于我的问题, 首先,我下载适用于Windows 64的预构建HDF5.Visual Studio 2015 我发现有两种类型的.lib文件 一个以前缀" lib"开头另一个没有前缀" lib"

enter image description here

我不明白其他。

在开始时,我链接到C ++的所有.lib文件 (不要使用f90 fortran JAVA ......)

编译器说有重复的符号。 然后我只在前面链接了hdf5.lib ... hdf5_cpp.lib(没有word" lib")。 然后编译器说" Undefied external symbol" 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

它有效。