#visual-studio-2019 #hdf5 #vcpkg
Вопрос:
Мы очень ценим любую помощь. У меня возникают ошибки ссылок при попытке использовать библиотеки HDF5, установленные с помощью vcpkg с Visual Studio 2019 в Windows 10.
Я установил HDF5 1.12.0 в Windows 10 с помощью vcpkg: PowerShell: .vcpkg install hdf5 hdf5:x64-windows
Затем я попытался использовать Visual Studio 2019 для создания своего проекта, использующего HDF5, но я продолжаю получать следующие ошибки LNK2001.
- неразрешенный внешний символ H5T_IEEE_F64BE_g
- неразрешенный внешний символ H5T_STD_I64BE_g
- неразрешенный внешний символ H5T_C_S1_g
- неразрешенный внешний символ H5T_NATIVE_INT_g
- неразрешенный внешний символ H5T_NATIVE_DOUBLE_g
Я попытался решить эту проблему, напрямую добавив дополнительные каталоги библиотек, которые находятся в разделе vcpkg/пакеты/ для HDF5, SZIP и ZLIB, которые были автоматически установлены в рамках шага установки HDF5, указанного ранее, а также я добавил файлы библиотек в дополнительные зависимости в порядке, установленном документацией HDF5:
- hdf5_hl.lib
- hdf5.lib
- szip.lib
- zlib.lib
Но у меня все еще есть нерешенные ошибки внешнего символа.
Ответ №1:
Все эти символы имеют префикс H5_DLLVAR
. Таким образом, вам необходимо явно задать определение препроцессора H5_BUILT_AS_DYNAMIC_LIB
, если вы не используете CMake и только интеграцию MSBuild, которую предоставляет vcpkg. Вы также можете открыть и выпустить vcpkg, так как он должен встроить это определение в правильный заголовок hdf5, если библиотека создается динамически.
Ответ №2:
Команда vcpkg, которую я использовал, устанавливает динамическую версию библиотек. Вместо этого я установил статическую версию библиотек, используя:
./vcpkg install hdf5:x64-windows-static
Не требуется ручного включения библиотечных каталогов или самих библиотек. Просто не забудьте также выполнить эту команду (при первой установке vcpkg).:
./vcpkg.exe integrate install
Как только это было сделано, Visual Studio 2019 смогла правильно использовать библиотеки HDF5 для моего проекта, и ошибка компоновщика исчезла (был создан двоичный файл).
Надеюсь, это поможет кому-нибудь в будущем!