Я создаю подключаемый модуль для MS Visual C++ 2010 Express и хочу включить возможности из библиотеки HDF5. а>. Я пробовал как собрать HDF5 из исходного кода с помощью CMake, так и установить предварительно скомпилированную библиотеку (HDF5-1.8.7_CMake_x86_shared.zip
для ВК 2008). Для любого каталога/метода сборки я изменил свойство своего проекта:
- C/C++> Общие> Дополнительные каталоги включения: добавьте
include
для HDF5 - Linker> Общие> Дополнительные каталоги библиотек: добавьте
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, это были полезные советы для таких нубов, как я. Просто для ясности мне действительно нужно было добавить пути к файлам lib в Linker > Input > Additional Dependencies:
hdf5dll.lib
hdf5_cppdll.lib
Мне может понадобиться добавить другие файлы lib, если мне потребуются другие функции HDF5. Кроме того, оказалось, что мне нужно скопировать библиотеки DLL HDF5 (из bin
) в мой системный каталог (например, C:\WINDOWS\System32\
), чтобы плагин работал правильно во время выполнения. Теперь все хорошо, спасибо!
extern "C"
или вы хотите экспортировать искаженные имена? - person David Heffernan   schedule 13.09.2011