c++ - 使用静态链接编译 hdf5 项目

标签 c++ static-libraries hdf5

我正在尝试编译和链接一个使用 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 两种模式。我也尝试过动态链接,这导致了相同的错误消息。

我现在已经花了很多时间解决这个问题,我不确定自己能否在合理的时间内解决这个问题。有没有人对 hot 进行有什么好的建议?

是的,CMake 脚本和编译在 Linux 下运行良好,所以我猜它在某种程度上与 VS 相关。

最佳答案

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

enter image description here

我不明白其中的不同。

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

编译器说有重复的符号。 然后我只链接 hdf5.lib ... hdf5_cpp.lib(没有单词“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

而且有效。

关于c++ - 使用静态链接编译 hdf5 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167645/

相关文章:

c++ - 如何生成可变参数包?

python - 在处理不适合 RAM 的数据时,Keras fit_generator 是最好的选择吗?

c++ - 将 hdf5 读入存在内存问题的 c++

c - 如何从VC8中的2个静态库中获取所有符号冲突

ios - 将xcode项目转换为静态库

c++ - 在库的文件名中使用加号 ( '+' ) 是不是很糟糕?

mysql - 查询 SQL + HDF5 混合体

c++ - 如何调用类的默认构造函数,其构造函数由具有所有默认参数的 ctor 提供?

c++ - -fno-elide-constructors 是否包含在 -O0 或任何其他优化级别中?

c++ - 是否有 C++ 函数来检查字符串之间的相似性?