c++ - 如何将 hdf5 添加到 Qt 项目中?

标签 c++ windows qt hdf5

情况:

我需要向我的 qt 项目添加一个库(在我的例子中是 HDF5)。

我知道如何为我的目的编写足够的 C++ 代码,但我对 .pro 文件一无所知。当我尝试用谷歌搜索我的问题或添加库的一般指南时,我找到了很多答案,但没有一个能理解,因为它们需要比我拥有的更多的知识。他们说诸如“在这里和那里编译它”,“将这个和那个添加到您的系统”,“在目录 xyz 中使用 qmake”之类的话。有人可以回答这个问题,以便只知道一点 c++ 和 qt 的绿色编译和运行按钮的人理解它吗?会很棒:-)

我累的是:

我知道qt里面有个wizarb可以给项目添加库。我用它来添加所需的库。我将它们添加为“外部库”。 我试过动态或静态,我也试过只添加 hdf5.libhdf5_cpp.lib

问题:

当我按照上面的描述进行操作并尝试使用添加的库中的函数时,我总是会收到如下错误:undefined reference to H5::Function_Name_xyz

我的 .pro 看起来像(由 qt add-library-wizard 生成):

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
        main.cpp


#Add external static library "hdf5.lib":
unix|win32: LIBS += -L'C:/Program Files/HDF_Group/HDF5/1.10.2/lib/' -lhdf5

INCLUDEPATH += 'C:/Program Files/HDF_Group/HDF5/1.10.2/include'
DEPENDPATH += 'C:/Program Files/HDF_Group/HDF5/1.10.2/include'

win32:!win32-g++: PRE_TARGETDEPS += 'C:/Program Files/HDF_Grou/HDF5/1.10.2/lib/hdf5.lib'


#Add external static library "hdf5_cpp.lib"
unix|win32: LIBS += -L'C:/Program Files/HDF_Group/HDF5/1.10.2/lib/' -lhdf5_cpp

INCLUDEPATH += 'C:/Program Files/HDF_Group/HDF5/1.10.2/include'
DEPENDPATH += 'C:/Program Files/HDF_Group/HDF5/1.10.2/include'

win32:!win32-g++: PRE_TARGETDEPS += 'C:/Program Files/HDF_Group/HDF5/1.10.2/lib/hdf5_cpp.lib'

使用:

  • C++
  • Qt 5.10.1
  • MinGW 32 位
  • HDF5 1.10.2
  • Windows 7

最佳答案

我前段时间遇到了同样的问题。我执行了以下操作来更正链接错误。

  1. 确保在将新库添加到 .pro 文件后运行 qmake(Build-> Run qmake)。
  2. 由于您使用的是带有预构建 HDF 库的 Windows,因此您应该使用 MSVC2015 32 位构建和运行工具包。预建库使用 Microsoft Visual C++ 编译器,因此要使用 HDF 库,您需要使用该编译器。
  3. 根据 HDF 文档,您需要先列出外部库。以下片段显示了我使用动态库的设置。
  4. 如果您使用动态库,请务必将 DEFINES += H5_BUILT_AS_DYNAMIC_LIB 添加到您的 .pro 文件中。
win32: LIBS += -L$$PWD/'../../../../../Program Files/HDF_Group/HDF5/1.10.4/lib/' -lszip -lzlib -lhdf5 -lhdf5_cpp

INCLUDEPATH += $$PWD/'../../../../../Program Files/HDF_Group/HDF5/1.10.4/include'
DEPENDPATH += $$PWD/'../../../../../Program Files/HDF_Group/HDF5/1.10.4/include'

关于c++ - 如何将 hdf5 添加到 Qt 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51020354/

相关文章:

qt - 我可以在运行时更改像素比(屏幕)吗?

c++ - 检查类是否有一个空的析构函数

c++ - 在 Visual Studio 2015 中使用 XP Targeting 编译时 Windows XP 上出现 fatal error

windows - win32 PE 加密器 = 防病毒误报

windows - FFMPEG - 批量提取媒体持续时间并写入文本文件

c++ - QT中如何更新一个窗口?

c++ - QXmlStreamReader获取标签值

c++ - 访问 CV_32SC1 nx1 opencv 矩阵

C++ 在编译时将整数转换为字符串

c++ - 如何制作 sfml Sprite 列表并使用 for 循环使它们成为 "solid"