HDF5 построен на MS VC 2008 и поддерживает библиотеки 1.39.0 в приложении, созданном на MS VC 2010 boost 1.45.0

#c #visual-studio-2010 #visual-c #boost #hdf5

#c #visual-studio-2010 #visual-c #boost #hdf5

Вопрос:

Я обновился до MS VC 2010 (Visual Studio Professional) и boost 1.45.0, но я все еще пытаюсь использовать HDF5 1.8.4p1, созданный с помощью MS VC 2008 и boost 1.39.0; все строится нормально (я явно указываю boost_zlib-vc90 *.[lib / dll] требуется в моем пути к библиотеке HDF5). Но когда я запускаю, я получаю следующую ошибку во время выполнения в библиотеках HDF5:

 Unhandled exception at 0x... in <exec>: 0x... : Access violation reading location 0xffffffffffffffff 
 

Ошибка, похоже, явно изолирована от библиотек HDF5. Нарушение доступа происходит в конструкторе H5File(…) внутри вызова функции ниже (я подтвердил это, разделив на две строки кода). Я также пытался изменить флаги доступа к файлам HDF5, но безрезультатно:

 m_file.reset(new H5::H5File(path, H5F_ACC_RDONLY));
 

Здесь m_file имеет тип:

 boost::shared_ptr<H5::H5File>
 

У меня нет другого выхода, кроме как создавать библиотеки HDF5 с помощью MS VC 2010 и boost_zlib 1.45?

Редактировать:

Просто хотел уточнить, что в итоге я создал библиотеки HDF5 (было немного больно, но все получилось с использованием маршрута CMake) на MS VC 2010, и теперь мое приложение работает нормально. Еще раз спасибо.

Ответ №1:

Это никогда не сработает, разные версии boost определенно не совместимы с двоичными файлами (любая библиотека, которая широко использует шаблоны C , скорее всего, не будет совместима с двоичными файлами с другими версиями той же библиотеки). То же самое, предположительно, относится к различным версиям стандартной библиотеки C , поставляемой с Visual studio.

Единственное решение — перекомпилировать HDF5 с MSVC10 и boost 1.45.

Комментарии:

1. Спасибо @smerlin. Это то, что я надеялся услышать.

2. 1, абсолютно правильно. Кроме того, все должно быть скомпилировано с теми же параметрами компилятора для того же CRT.

3. @ildjarn: в большинстве случаев все в порядке, если версии CRT отличаются второстепенными номерами версий (версия Visual Studio и версия пакета обновления должны совпадать), но только если они связаны динамически и если версия CRT, загружаемая во время выполнения, идентична (что может быть достигнуто с помощью файлов манифеста).