Связывание библиотеки HDF5 с проектом Visual C ++ DLL: неразрешенный внешний символ __imp __ * - PullRequest
4 голосов
/ 13 сентября 2011

Я создаю плагин для MS Visual C ++ 2010 Express и хотел бы включить возможности из библиотеки HDF5 .Я пробовал как собрать HDF5 из исходного кода с помощью CMake, так и установить предварительно скомпилированную библиотеку (HDF5-1.8.7_CMake_x86_shared.zip для VC 2008).Для любого каталога / метода сборки я изменил свойство своего проекта:

  • C / C ++> General> Дополнительные каталоги включения: добавьте include для HDF5
  • Linker> General> Дополнительные каталоги библиотек: добавьте lib для 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:\MyProject\Release\MyProject.dll : fatal error LNK1120: 2 unresolved externals

Оба метода попытки связать в HDF5 (предварительно скомпилированные против самокомпилированных, как описано выше) приводят к точно таким же ошибкам, поэтому я не уверенгде я ошибаюсь.


Большое спасибо @HasanKhan и @StevieG, это были полезные советы для n00bs, как я.Просто для ясности, мне действительно нужно было добавить пути к файлам lib в Linker> Input> Additional Dependencies:

hdf5dll.lib
hdf5_cppdll.lib

Мне может понадобиться добавить другие файлы lib, если мне требуются другие функции HDF5.Кроме того, оказалось, что мне нужно было скопировать библиотеки HDF5 (из bin) в мою системную директорию (например, C:\WINDOWS\System32\), чтобы плагин работал правильно во время выполнения.Все хорошо, спасибо!

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011
  • Linker> General> Дополнительные каталоги библиотек: вы должны добавить путь к каталогу, содержащему здесь файл .lib

  • Linker> General> Input: youследует добавить имя файла .lib здесь

1 голос
/ 15 апреля 2015

Проверьте это:

  1. Линкер> Ввод> Дополнительные зависимости содержит hdf5.lib
  2. Linker> General> Каталоги дополнительных библиотек содержит путь к каталогу lib вашей установки HDF5
  3. C / C ++> Общие> Дополнительные каталоги включения содержит путь к каталогу include вашей установки HDF5
  4. Вы конфигурация сборки соответствует установленной версии HDF5 ( 32 или 64 бит )
  5. Вы добавляете в PATH переменную bin каталог вашей установки HDF5

Я думаю, этого достаточно.

...