Re: Rhdf5 issue
Hi Dirk,
thanks for this hint.
On Fri, Apr 26, 2019 at 11:29:41AM -0500, Dirk Eddelbuettel wrote:
> | $ echo 'Rhdf5lib::pkgconfig("PKG_CXX_LIBS")'| R --vanilla --slave
> | Error in system.file("lib", package = "Rhdf5lib", mustWork = TRUE) :
> | no file found
> | Calls: <Anonymous> -> Sys.getenv -> system.file
> | Execution halted
>
> Something is not right. From
>
> https://github.com/grimbough/Rhdf5lib/blob/master/R/zzz.R#L15-L18
>
> we have
>
> pkgconfig <- function(opt = c("PKG_CXX_LIBS", "PKG_C_LIBS")) {
>
> path <- Sys.getenv(
> x = "RHDF5LIB_RPATH",
> unset = system.file("lib", package="Rhdf5lib", mustWork=TRUE)
> )
>
> #... more stuff omitted ...
>
> So if the env.var is missing (as in your case) it assumes it has
> a "lib" directory installed in the package. > I read this as the
> package maintainer/author assuming the package would always
> install with a lib dir. Does it? I see no `inst/dir` in the
> sources.
I suspect there might be some tricks upstream of Rhdf5lib is doing since
the original tarball contains hdf5small_cxx_1.10.3.tar.gz which is
unpackaged, build and installed in configure. This was replaced by
the Debian packaged libhdf5 and thus the hdf5 library might reside in
some "unexpected" path.
> You could bypass the issue for now, it seems, by setting the
> variable it wants to use: RHDF5LIB_RPATH.
Since I'm not fully sure to what value setting RHDF5LIB_RPATH I
tried a different approach in src/Makevars:
HDF5_LIB="/usr/lib/`dpkg-architecture -qDEB_BUILD_GNU_TYPE`/hdf5/serial/"
PKG_LIBS=-L/usr/lib/R/site-library/Rhdf5lib/libs -lRhdf5lib -L$(HDF5_LIB) -lhdf5
(see https://salsa.debian.org/r-pkg-team/r-bioc-rhdf5/commit/49dea77def56c8222e3b1bd3913aa4a5e850e93f)
Strangely enough the build is ending in
g++ -std=gnu++11 -shared -L/usr/lib/R/lib -Wl,-z,relro -o rhdf5.so H5.o H5A.o H5D.o H5E.o H5F.o H5G.o H5I.o H5L.o H5O.o H5P.o H5S.o H5T.o H5constants.o HandleList.o HandleListWrap.o h5dump.o h5ls.o h5testLock.o h5writeDataFrame.o printdatatype.o wrap.o -L/usr/lib/R/site-library/Rhdf5lib/libs -lRhdf5lib -L/usr/lib/x86_64-linux-gnu/hdf5/serial/ -lhdf5 -L/usr/lib/R/lib -lR
/usr/bin/ld: cannot find -lRhdf5lib
collect2: error: ld returned 1 exit status
However, when I check inside the pbuilder environment:
root:/# ldd /usr/lib/R/site-library/Rhdf5lib/libs/Rhdf5lib.so
linux-vdso.so.1 (0x00007ffe93b80000)
/usr/lib/cowdancer/libcowdancer.so (0x00007f9bd426f000)
libhdf5_serial.so.103 => /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.103 (0x00007f9bd3ee3000)
libsz.so.2 => /usr/lib/x86_64-linux-gnu/libsz.so.2 (0x00007f9bd3ce0000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9bd3ac2000)
libR.so => /usr/lib/libR.so (0x00007f9bd3636000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9bd3475000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9bd346e000)
libncurses.so.6 => /lib/x86_64-linux-gnu/libncurses.so.6 (0x00007f9bd3445000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f9bd3417000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9bd33f6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9bd3273000)
libaec.so.0 => /usr/lib/x86_64-linux-gnu/libaec.so.0 (0x00007f9bd306b000)
libblas.so.3 => /usr/lib/x86_64-linux-gnu/libblas.so.3 (0x00007f9bd2ffc000)
libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f9bd2d8e000)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f9bd2d4c000)
libreadline.so.7 => /lib/x86_64-linux-gnu/libreadline.so.7 (0x00007f9bd2aff000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9bd2a8b000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f9bd2a63000)
libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f9bd2a4e000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9bd2a44000)
libicuuc.so.63 => /usr/lib/x86_64-linux-gnu/libicuuc.so.63 (0x00007f9bd2875000)
libicui18n.so.63 => /usr/lib/x86_64-linux-gnu/libicui18n.so.63 (0x00007f9bd259a000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f9bd2569000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9bd427f000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9bd254d000)
libicudata.so.63 => /usr/lib/x86_64-linux-gnu/libicudata.so.63 (0x00007f9bd0b5d000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9bd09d9000)
the library obviously exists and seems to be pretty functional. So
why am I getting "cannot find -lRhdf5lib"?
Kind regards
Andreas.
--
http://fam-tille.de
Reply to: