CMake успешно находит компонент HL для HDF5, но не выводит для него библиотеку

Я получаю следующую ошибку при запуске make в моем каталоге сборки

/usr/bin/ld: cannot find -lhdf5_hl
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-g++' failed with exit status 1

У меня установлена ​​libhdf5-dev, и libhdf5_hl.so существует в моем каталоге /usr/lib/x86_64-linux-gnu/hdf5/serial. Однако когда я запускаю cmake .. в каталоге сборки, я получаю следующую строку, которая не включает libhdf5_hl.so:

-- Found HDF5: /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so;/usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5_cpp.so;/usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so (found version "1.10.4") found components: C CXX HL 

Это CMakeList.txt, который я использую:

cmake_minimum_required(VERSION 3.10)

# set the project name and version
project(HDDM VERSION 1.0)

include(InstallRequiredSystemLibraries)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_VERSION_MAJOR "${HDDM_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${HDDM_VERSION_MINOR}")
include(CPack)

# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# look for installed packages in local build area
list(APPEND CMAKE_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/share/cmake)

# check for presence of compression libraries
find_package(BZip2 REQUIRED)
find_package(ZLIB REQUIRED)

# Xerces-C support
if (DEFINED XERCESCROOT)
    message("Looking in ${XERCESCROOT} for local Xerces-C installation")
    find_package(XercesC PATHS ${XERCESCROOT} NO_DEFAULT_PATH REQUIRED)
endif ()
find_package(XercesC REQUIRED)

# ROOT support
if (DEFINED ROOTSYS)
    message("Looking in ${ROOTSYS} for local ROOT installation")
    find_package(ROOT PATHS ${ROOTSYS} REQUIRED NO_DEFAULT_PATH)
endif ()
find_package(ROOT QUIET)

# HDF5 support
set(CMAKE_IGNORE_PATH
    $ENV{CONDA_PREFIX}/bin $ENV{CONDA_PREFIX}/lib $ENV{CONDA_PREFIX}/include
   )
if (DEFINED HDF5_ROOT)
    message("Looking in ${HDF5_ROOT} for local HDF5 installation")
    find_package(HDF5 REQUIRED COMPONENTS C CXX HL PATHS ${HDF5_ROOT} NO_DEFAULT_PATH)
elseif (EXISTS "${CMAKE_INSTALL_PREFIX}/share/cmake/hdf5-config.cmake")
    message("Looking in ${CMAKE_INSTALL_PREFIX} for local HDF5 installation")
    set(HDF5_DIR "${CMAKE_INSTALL_PREFIX}/share/cmake")
    find_package(HDF5 REQUIRED COMPONENTS C CXX HL PATHS ${HDF5_DIR} NO_DEFAULT_PATH)
    if (NOT DEFINED HDF5_INCLUDE_DIRS)
        set(HDF5_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include")
    endif ()
    set(CMAKE_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/lib64" "${CMAKE_INSTALL_PATH}/lib")
    find_library(HDF5_LIBRARIES hdf5)
    find_library(HDF5_HL_LIBRARIES hdf5_hl)
else()
  find_package(HDF5 REQUIRED COMPONENTS C CXX HL)
endif ()

# xalan-j2 package
if (NOT DEFINED XALANJ2_PATH)
    set(XALANJ2_PATH /usr/share/java)
endif ()
if (EXISTS ${XALANJ2_PATH}/xalan2.jar)
    message("-- Found xalan2 at ${XALANJ2_PATH}/xalan2.jar")
elseif (EXISTS ${XALANJ2_PATH}/xalan-j2.jar AND EXISTS ${XALANJ2_PATH}/xalan-j2-serializer.jar)
    message("-- Found xalan-j2 at ${XALANJ2_PATH}/xalan-j2.jar")
else()
    message("Cannot find xalan-j2 at ${XALANJ2_PATH}/xalan-j2.jar, some schema utilities will fail!")
endif ()
   
# xmllint command
if (NOT DEFINED XMLLINT_PATH)
    set(XMLLINT_PATH /usr/bin)
endif ()
if (EXISTS ${XMLLINT_PATH}/xmllint)
    message("-- Found xmllint at ${XMLLINT_PATH}/xmllint")
else()
    message("Cannot find xmllint at ${XMLLINT_PATH}/xmllint, some schema utilities will fail!")
endif ()

# libtirpc
include_directories(${CMAKE_SOURCE_DIR}/src/tirpc)
install(FILES ${CMAKE_SOURCE_DIR}/src/unistd_win32.h DESTINATION include)

# add the xstream library
add_subdirectory(xstream)

# build the executables
add_subdirectory(src)

# install the scripts
add_subdirectory(scripts)

# install the schemas
add_subdirectory(schemas)

# install the examples
add_subdirectory(models)
add_subdirectory(examples)

# define a separate target for the example python modules
add_custom_target(modules_install ALL
      COMMAND ${CMAKE_SOURCE_DIR}/scripts/python_module_installer.sh
              ${CMAKE_BINARY_DIR}/models 
              ${CMAKE_INSTALL_PREFIX}
      DEPENDS python_modules
)

# package config
set(INCLUDE_INSTALL_DIR include/)
set(LIB_INSTALL_DIR lib/)
set(SYSCONFIG_INSTALL_DIR etc/hddm/)
#...
include(CMakePackageConfigHelpers)
configure_package_config_file(HddmConfig.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/HddmConfig.cmake
  INSTALL_DESTINATION ${LIB_INSTALL_DIR}/hddm/cmake
  PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
write_basic_package_version_file(
  ${CMAKE_CURRENT_BINARY_DIR}/HddmConfigVersion.cmake
  VERSION 1.0.0
  COMPATIBILITY SameMajorVersion )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/HddmConfig.cmake
              ${CMAKE_CURRENT_BINARY_DIR}/HddmConfigVersion.cmake
        DESTINATION ${LIB_INSTALL_DIR}/hddm/cmake )

В своем посте CMakeLists.txt вы находите HDF5, но ничего с ним не делаете. Поэтому сложно сказать, что вы можете делать не так. Как есть, ваш вопрос только подразумевает, что вы пытаетесь установить ссылку с помощью libhdf5_hl, но вы не указываете его фактическое местоположение команде ссылки. Запустите make VERBOSE=1 и убедитесь, что команда ссылки соответствует вашим ожиданиям.

nega 27.08.2024 05:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переменная HDF5_LIBRARIES содержит список «обычных» библиотек для привязок HDF5. Библиотеки для API высокого уровня (HL) перечислены в переменной HDF5_HL_LIBRARIES. Это отмечено в документации для модуля FindHDF5.cmake (который выполняется во время find_package(HDF5)):

HDF5_LIBRARIES

Необходимые библиотеки для всех запрошенных привязок

HDF5_HL_LIBRARIES

Необходимые библиотеки для API высокого уровня HDF5 для всех привязок, если включен компонент HL.

Другие вопросы по теме