2016-11-16 4 views
0

Я использую find_package(HDF5 COMPONENTS CXX REQUIRED) в своем сценарии CMAKE для загрузки каталогов и библиотек include. Cmake говорит мнеCmake находит hdf5, но пытается связать с dll на окнах

Found HDF5: C:/Program Files/HDF_Group/HDF5/1.10.0/bin/hdf5_cpp.dll (found version "1.10.0") found components: CXX 

И создает мое visual studio решение. Я также использовать библиотеку, сохраненную в ${HDF5_LIBRARIES} ${HDF5_CXX_LIBRARIES} для моей цели, но когда я строю, я получаю ошибку компоновщика LNK1107 сказать, что для файла hdf5_cpp.dll:

invalid or corrupt file: cannot read at 0x380 

, который я думаю, что это связано с тем, что visual studio пытается напрямую связать с файлом dll вместо против lib файла, который находится в другой папке, а именно в:

C:\Program Files\HDF_Group\HDF5\1.10.0\lib 

Вопрос: является ли это ошибка в FindHDF или я настроить что-то не так?

ответ

1

Я не использовал hdf5 для окон в течение некоторого времени, но я помню, что есть ошибка, которая заставляет ее ссылаться на dll, а не на lib. вы должны установить вручную (либо с помощью командной строки метода CMake -D, или с помощью CMake GUI) HDF5_hdf5_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5.lib HDF5_hdf5_cpp_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5_cpp.lib и т.д. - или просто HDF5_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5.lib HDF5_cpp_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5_cpp.lib в зависимости от того, есть ли у вас старую или новую версию FindHDF5 (они меняют библиотеку var names в более новых версиях - проверьте те, которые используются, чтобы убедиться, что вы их правильно исправьте - я делаю это из памяти, поэтому, возможно, ошибся)

EDIT: Если опция manaully, определяющая библиотеки, является проблемой , тогда есть возможность использовать FindPackage (HDF5 NO_MODULE), если ваша библиотека hdf5 была скомпилирована с использованием cakeake, созданного makefilesetc. При использовании NO_MODULE скрипты поиска будут обходить скрипт findhdf5.cmake и искать файл HDF5Config.cmake или hdf5-config.cmake, который помещается в соответствующий поддиректор hdf5 build/install folfer.

Это кросс-платформенный дружественных и поддерживается всеми новыми версиями hdf5 - при условии, что они были построены с использованием CMake и не ./configure ...

+0

Хм, это не очень хороший вариант, так как это CMake сценарий предполагается для работы на разных платформах, и я хотел бы избежать написания большого количества случаев с конкретными материалами на платформе. Интересно, почему это не исправлено, если это известная ошибка. – NOhs

+0

Вот проблема, для тех, кто хочет следовать ей и посмотреть, если она когда-нибудь будет решена: https://gitlab.kitware.com/cmake/cmake/issues/16534 – NOhs

+0

И для ручной спецификации путей нужно вероятно, использовать кавычки из-за пробелов на дорожках. – NOhs

Смежные вопросы