- 问题描述:
项目中开发hdf5的读写,之前我在linux安装过hdf5,安装默认路径是“/usr/lib,最近我又重装了hdf5,增加了c++选项,安装路径是“/usr/local/hdf5/lib”,我自己写的cmake的内容如下:
--FindHDF5.cmake
# HDF5_INCLUDE_DIR --<name>_INCLUDE_DIR
# HDF5_LIBRARY_DIR --<name>_LIBRARY
# HDF5_FOUND --<name>_FOUND
FIND_PATH(HDF5_INCLUDE_DIR hdf5.h /usr/local/hdf5/include)
MESSAGE(STATUS "HDF5_INCLUDE_DIR: " ${HDF5_INCLUDE_DIR})
FIND_LIBRARY(HDF5_LIBRARY_DIR hdf5 /usr/local/hdf5/lib)
MESSAGE(STATUS "HDF5_LIBRARY_DIR: " ${HDF5_LIBRARY_DIR} )
IF (HDF5_INCLUDE_DIR AND HDF5_LIBRARY_DIR)
SET(HDF5_FOUND TRUE)
ENDIF(HDF5_INCLUDE_DIR AND HDF5_LIBRARY_DIR)
IF (HDF5_FOUND)
IF(NOT HDF5_FIND_QUIETLY)
MESSAGE(STATUS "Found HDF5: ${HDF5_LIBRARY_DIR}")
ENDIF(NOT HDF5_FIND_QUIETLY)
ELSE (HDF5_FOUND)
IF (HDF5_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find hdf5 library")
ENDIF (HDF5_FIND_REQUIRED)
ENDIF(HDF5_FOUND)
FindHDF5Cxx.cmake
# HDF5Cxx_INCLUDE_DIR --<name>_INCLUDE_DIR
# HDF5Cxx_LIBRARY_DIR --<name>_LIBRARY
# HDF5Cxx_FOUND --<name>_FOUND
FIND_PATH(HDF5Cxx_INCLUDE_DIR H5Cpp.h /home/zyx/projects/hdf/src)
MESSAGE(STATUS "HDF5Cxx_INCLUDE_DIR: " ${HDF5Cxx_INCLUDE_DIR})
FIND_LIBRARY(HDF5Cxx_LIBRARY_DIR hdf5_cpp /usr/local/hdf5/lib)
MESSAGE(STATUS "HDF5Cxx_LIBRARY_DIR: " ${HDF5Cxx_LIBRARY_DIR} )
IF (HDF5Cxx_INCLUDE_DIR AND HDF5Cxx_LIBRARY_DIR)
SET(HDF5Cxx_FOUND TRUE)
ENDIF(HDF5Cxx_INCLUDE_DIR AND HDF5Cxx_LIBRARY_DIR)
IF (HDF5Cxx_FOUND)
IF(NOT HDF5Cxx_FIND_QUIETLY)
MESSAGE(STATUS "Found HDF5Cxx: ${HDF5Cxx_LIBRARY_DIR}")
ENDIF(NOT HDF5Cxx_FIND_QUIETLY)
ELSE (HDF5Cxx_FOUND)
IF (HDF5Cxx_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find hdf5Cxx library")
ENDIF (HDF5Cxx_FIND_REQUIRED)
ENDIF(HDF5Cxx_FOUND)
camke指定的查找路径是“/usr/local/hdf5/lib”,但打印的结果是:
2. 解决方法:
解决的办法很简单,就是把之前安装路径下的”/usr/lib”的hdf5库都删掉,哈哈!
正确的输出结果:
依赖的头文件和库都能正确找到,make的就能编译通过了,如下: