Rhdf5lib 1.33.2
Rhdf5lib provides versions of the C and C++ HDF5 libraries. It is primarily useful to developers of other R packages who want to make use of the capabilities of the HDF5 library directly in the C or C++ code of their own packages, rather than using a higher level interface such as the rhdf5 package. Using Rhdf5lib makes life easier for users, as they do not have to worry about installing libraries at a system level, and for developers since they can work with a defined version of the library rather than developing strategies to cope with the potential for multiple versions.
Rhdf5lib is very much inspired by the zlibbioc and Rhtslib packages.
There is an example package, usingRhdf5lib, that demonstrates how packages should link to Rhdf5lib.
To link successfully to the HDF5 library included in Rhdf5lib a package must include both a src/Makevars.win and src/Makevars file.
Add the following lines to both src/Makevars and src/Makevars.win
RHDF5_LIBS=$(shell "${R_HOME}/bin${R_ARCH_BIN}/Rscript" -e \
'Rhdf5lib::pkgconfig("PKG_C_LIBS")')
PKG_LIBS=$(RHDF5_LIBS)
RHDF5_CPPFLAGS = $(shell "$(R_HOME)/bin${R_ARCH_BIN}/Rscript" -e 'Rhdf5lib::pkgconfig("PKG_CPP_FLAGS")')
PKG_CPPFLAGS = $(RHDF5_CPPFLAGS)
Alternatively if using the C++ interface, please add the following lines instead:
RHDF5_LIBS=$(shell "${R_HOME}/bin${R_ARCH_BIN}/Rscript" -e \
'Rhdf5lib::pkgconfig("PKG_CXX_LIBS")')
PKG_LIBS=$(RHDF5_LIBS)
RHDF5_CPPFLAGS = $(shell "$(R_HOME)/bin${R_ARCH_BIN}/Rscript" -e 'Rhdf5lib::pkgconfig("PKG_CPP_FLAGS")')
PKG_CPPFLAGS = $(RHDF5_CPPFLAGS)
The statement for each platform modifies the $PKG_LIBS variable. If your package needs to add additional information to the $PKG_LIBS variable, do so by adding to the PKG_LIBS=$(RHDF5_LIBS) line, e.g.,
PKG_LIBS=$(RHDF5_LIBS) -L/path/to/foolib -lfoo
Note that the use of $(shell ...) necessitates using GNU Make, and you need to make this requirement explicit in your package’s DESCRIPTION file via the entry:
SystemRequirements: GNU make
The default behaviour of Rhdf5lib::pkgconfig() is to report the location of the shared library as the result of system.file("lib", package="Rhdf5lib"). If this is inappropriate for your system e.g. a cluster with a shared file system, use the environment variable RHDF5LIB_RPATH to override this and set an appropriate location for your infrastructure.
Valid options to provide to pkgconfig() are: PKG_C_LIBS, PKG_CXX_LIBS, PKG_C_HL_LIBS and PKG_CXX_HL_LIBS and PKG_CPP_FLAGS. Choose the most appropriate depending upon whether your linking code requires the C++ API (C vs CXX) and/or the HDF5 ‘high-level’ API (HL). Choosing options that you don’t require should not harm performance, but will result in a larger library and potentially greater memory usage for your application, so it is good practice to select only the features you need.
In order for the C/C++ compiler to find the HDF5 headers during package installation, add Rhdf5lib to the LinkingTo field of the DESCRIPTION file of your package, e.g.
LinkingTo: Rhdf5lib
In you C or C++ code files, you can then use the standard include techniques, e.g., #include "hdf5.h" or #include "H5Cpp.h". You can inspect the header files manually to check their names and declared functions. To find their location on your system you can use the following code:
system.file(package="Rhdf5lib", "include")
## [1] "/tmp/RtmphufY4W/Rinst34d44f2b61068c/Rhdf5lib/include"
Because potential issues are likely to be different with the switch to a CMake build system, we start from a clean slate and have not implemented any of the configuration options that were available in the previous version of Rhdf5lib. If you have a non-standard system setup and would like to see support for it, please open an issue on the GitHub repository for this package.
MLS was supported by the BMBF-funded Heidelberg Center for Human Bioinformatics (HD-HuB) within the German Network for Bioinformatics Infrastructure (de.NBI), Grant Number #031A537B
## R Under development (unstable) (2026-03-05 r89546)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.4 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.23-bioc/R/lib/libRblas.so
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0 LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_GB LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: America/New_York
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] BiocStyle_2.39.0
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.39 R6_2.6.1 bookdown_0.46
## [4] fastmap_1.2.0 xfun_0.56 cachem_1.1.0
## [7] knitr_1.51 htmltools_0.5.9 rmarkdown_2.30
## [10] lifecycle_1.0.5 cli_3.6.5 sass_0.4.10
## [13] jquerylib_0.1.4 compiler_4.6.0 tools_4.6.0
## [16] evaluate_1.0.5 bslib_0.10.0 yaml_2.3.12
## [19] otel_0.2.0 BiocManager_1.30.27 jsonlite_2.0.0
## [22] rlang_1.1.7