As I found surprisingly difficult and confusing to build and compile C++ applications with the hdf5 library, I decided to post a small guide on how I achieve that.
Building hdf5
Hdf5 provides a number of download options. The one I used is the cmake version
CMake-hdf5-1.10.5.tar.gz.
After extracting there is a shell script under the main folder
build-unix.sh .
The building process under Ubuntu required just that one line.
This will create a build directory inside the main folder, whereas the build directory has several folders.
Using hdf5
To use the cmake version we need a CMakeLists.txt file.
A template of such file is included in here. This file and more information can be also found under the Building HDF5 with CMake guide.
Starting from that template and after spending many hours searching I have modified the cmake as follows: to make it work for C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
cmake_minimum_required (VERSION 3.10.1) project( myFirstHdf5 C CXX ) set (LIB_TYPE STATIC) # or SHARED string(TOLOWER ${LIB_TYPE} SEARCH_TYPE) #find_package (HDF5 NAMES hdf5 COMPONENTS C CXX ${SEARCH_TYPE}) #find_package(HDF5 COMPONENTS CXX HL REQUIRED) find_package(HDF5 COMPONENTS C CXX HL REQUIRED) link_directories( ${HDF5_LIBRARY_DIRS} ) include_directories (${HDF5_INCLUDE_DIR}) set (LINK_LIBS ${LINK_LIBS} ${HDF5_C_${LIB_TYPE}_LIBRARY}) #set (example hdfcompile) add_executable (myFirstHdf5 myFirstHdf5.cpp) target_link_libraries (myFirstHdf5 ${HDF5_CXX_LIBRARIES}) |
Put the above CMakeLists.txt file in the same folder along with the *.cpp file, which in the example is named myFirstHdf5.cpp.
Next, to run cmake you need to pass at the minimum the -G option which is the easiest and the HDF5_DIR, which was quite hard to find it. A small hint on how to find that is that the HDF5_DIR should contain the file hdf5-config.cmake. In my case, I found this file in a few places and just picked one and luckily worked.
Here is the full cmake command to build a debug version
1 2 3 |
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DHDF5_DIR=${HOME}/Downloads/CMake-hdf5-1.10.5/build/_CPack_Packages/Linux/TGZ/HDF5-1.10.5-Linux/HDF_Group/HDF5/1.10.5/share/cmake/hdf5 . |
I hope this will save a bit of your time if you ever stumble on this