链接HDF5库到Visual c++ DLL项目:未解析的外部符号__imp__*

Linking HDF5 library into Visual C++ DLL project: unresolved external symbol __imp__*

本文关键字:外部 符号 imp Visual 库到 HDF5 c++ DLL 项目 链接      更新时间:2023-10-16

我正在用MS Visual c++ 2010 Express构建一个插件,我想包括HDF5库的功能。我尝试过用CMake从源代码构建HDF5,并安装预编译库(HDF5-1.8.7_CMake_x86_shared.zip for VC 2008)。对于构建目录/方法,我已经修改了我的项目属性:

  • C/c++> General> Additional Include Directories:为HDF5添加include
  • Linker> General> Additional Library Directories: add lib for HDF5

这是我的DLL模块的一个片段:

#include "cpp/H5Cpp.h"
static IResult OnBeginDocument (IDocument pDoc)
{
  H5Fcreate("C:\out.h5", H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
  return True;
}

请注意,vc++正确解析.h文件,例如,当我将鼠标悬停在该片段上时,可以直观地显示H5Fcreate的弹出式文档。我的问题是我无法构建试图使用H5Fcreate的模块。下面是我尝试构建的控制台输出:

1>MyProject.obj : error LNK2019: unresolved external symbol __imp__H5Fcreate referenced in function "int __cdecl OnBeginDocument(struct IModuleStruct *)" (?OnBeginDocument@@YAHPAUIModuleStruct@@@Z)
1>MyProject.obj : error LNK2019: unresolved external symbol __imp__H5check_version referenced in function "int __cdecl OnBeginDocument(struct IModuleStruct *)" (?OnBeginDocument@@YAHPAUIModuleStruct@@@Z)
1>C:MyProjectReleaseMyProject.dll : fatal error LNK1120: 2 unresolved externals

尝试在HDF5中链接的两种方法(预编译与自编译,如上所述)产生这些完全相同的错误,所以我不确定我在哪里出错了。


非常感谢@HasanKhan和@StevieG,这些都是像我这样的新手的有用建议。只是为了清楚地跟进,我确实需要在链接器>输入>附加依赖项中添加库文件路径:

hdf5dll.lib
hdf5_cppdll.lib

如果我需要其他HDF5功能,我可能需要添加其他库文件。此外,事实证明,我需要将HDF5 dll(从bin)复制到我的系统目录(例如,C:WINDOWSSystem32),以便插件在运行时正常运行。现在都好了,谢谢!

  • Linker> General> Additional Library Directories:你应该添加包含.lib文件的目录路径

  • 链接器>通用>输入:你应该在这里添加。lib文件的名称

检查这些东西:

  1. 链接器>输入>附加依赖包含hdf5.lib
  2. 链接器>通用>附加库目录包含lib HDF5安装目录的路径
  3. C/c++> General>附加包含目录包含路径包括 HDF5安装目录
  4. 构建配置匹配已安装的HDF5版本(3264位)
  5. 您添加到PATH变量bin目录的HDF5安装

我觉得够了。