hdf5.h нет такого файла или каталога под Ubuntu и CMake - PullRequest
0 голосов
/ 25 января 2019

Я уже установил HDF5 под Ubuntu:

sudo apt install libhdf5-dev

У меня есть программа Qt, использующая HDF5, которая прекрасно компилируется под CentOS 7, но не под Ubuntu:

ошибка: hdf5.h: Нет такого файла или каталога #include ^ ~~~~~~~

Я использую CMake для генерации файлов сборки, и в нем мне не нужно было обрабатывать HDF5 для сборки CentOS.

Я добавил эту часть, которую нашел в Интернете, в скрипт CMake, но у меня все еще есть ошибка компиляции.

FIND_PACKAGE(ZLIB)
FIND_LIBRARY(HDF5_LIBRARY hdf5 ...)
FIND_LIBRARY(HDF5_HL_LIBRARY hdf5_hl ...)
IF(NOT TARGET hdf5 AND NOT TARGET hdf5_hl)
    ADD_LIBRARY(hdf5 SHARED IMPORTED)
    ADD_LIBRARY(hdf5_hl SHARED IMPORTED)
ENDIF()
SET_TARGET_PROPERTIES(hdf5 PROPERTIES IMPORTED_LOCATION ${HDF5_LIBRARY})
SET_TARGET_PROPERTIES(hdf5_hl PROPERTIES IMPORTED_LOCATION
                                         ${HDF5_HL_LIBRARY})
SET(HDF5_LIBRARIES hdf5 hdf5_hl ${ZLIB_LIBRARIES} m)

Что я могу добавить в скрипт, чтобы исправить проблему включения?

с помощью "locate" я нашел другой hdf5.h:

/usr/include/hdf5/mpich/hdf5.h
/usr/include/hdf5/openmpi/hdf5.h
/usr/include/hdf5/serial/hdf5.h

Я действительно хочу знать, что означает "libhdf5-dev"? и почему HDF5 не предоставляется правильно под Ubuntu (это безумие!)

Ответы [ 2 ]

0 голосов
/ 26 января 2019

В Ubuntu я был вынужден добавить MPI в скрипт CMake. Мне не нравится это решение, но его ошибка CMake и Ubuntu ...

find_package(HDF5)
find_package(MPI)

....

target_link_libraries(${binary} ${MPI_LIBRARIES} ${HDF5_LIBRARIES} ... )

target_include_directories(${binary} PRIVATE ${HDF5_INCLUDE_DIRS})

есть также такой вопрос: Использование последовательного HDF5 C ++ с CMake

libhdf5-dev, по сути, является серийной версией https://packages.ubuntu.com/xenial/amd64/libhdf5-dev/filelist

0 голосов
/ 25 января 2019

Как видно из документации импортированных целей , вам также необходимо заполнить INTERFACE_INCLUDE_DIRECTORIES, чтобы указать расположение заголовков. Вы также можете добавить зависимость для HL с помощью INTERFACE_LINK_LIBRARIES.

Так что это будет что-то вроде:

SET_TARGET_PROPERTIES(hdf5 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS})

Я думаю, что это то, что вы хотите указать правильно:

SET_TARGET_PROPERTIES(hdf5 PROPERTIES INTERFACE_LINK_LIBRARIES ${ZLIB_LIBRARIES} m)
SET_TARGET_PROPERTIES(hdf5_hl PROPERTIES INTERFACE_LINK_LIBRARIES hdf5)

Вместо вашего HDF5_LIBRARIES изменения.

...