CMake识别HDF5的HL组件但未关联库,编译链接报错
解决HDF5 HL库链接错误问题
问题现象
执行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 ..输出显示找到HDF5的C、CXX、HL组件,却未列出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
问题原因
查看提供的CMakeLists.txt,在HDF5处理的elseif分支中,手动执行find_library覆盖了find_package自动设置的变量,且设置的CMAKE_LIBRARY_PATH未包含系统HDF5 HL库的路径,导致find_library无法定位libhdf5_hl.so,最终链接阶段报错。
解决方案
修改CMakeLists.txt中的HDF5配置部分,移除手动查找库的代码:
在以下代码块中:
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)
删除这三行:
set(CMAKE_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/lib64" "${CMAKE_INSTALL_PATH}/lib") find_library(HDF5_LIBRARIES hdf5) find_library(HDF5_HL_LIBRARIES hdf5_hl)
原因是find_package(HDF5 REQUIRED COMPONENTS C CXX HL)已经会自动识别并设置HDF5_LIBRARIES、HDF5_HL_LIBRARIES等变量,无需手动查找。
修改后,重新执行:
rm -rf build/* # 清理旧构建文件 cmake .. make
如果仍有问题,可在执行cmake时显式指定HDF5路径:
cmake .. -DHDF5_ROOT=/usr/lib/x86_64-linux-gnu/hdf5/serial
内容的提问来源于stack exchange,提问作者bigboy1001
相关产品推荐
相关产品推荐

