bullard at stat.Berkeley.EDU
2010-Mar-03 00:20 UTC
[Rd] linking hdf5, requires setting LD_LIBRARY_PATH
I am writing an R package to interface to hdf5 files (yes I know one exists, the issue will be demonstrated using that package). I tend to like to build/install things locally so that aspects of the system I am working on don't cause problems later when attempting to install elsewhere. To this end, I build and install the hdf5 libraries w/out incident: tar xzf hdf5-1.8.4.tar.bz2 cd hdf5-1.8.4 ./configure --prefix=/home/jbullard/scratch/hdf5_install make && make install Now, I make a shared object using the following (I am compiling hdf5.c directly in src of the hdf5 package): gcc -I/home/jbullard/projects/me/R-builder/lib64/R/include -I/home/jbullard/scratch/hdf5_install/include -I/usr/local/include -fpic -g -O2 -std=gnu99 -c hdf5.c -o hdf5.o gcc -shared -L/usr/local/lib64 -o hdf5.so hdf5.o -L/home/jbullard/scratch/hdf5_install/lib -lhdf5 -lz -lm -L/home/jbullard/projects/me/R-builder/lib64/R/lib -lR I then start R and get the following error: Error in dyn.load("hdf5.so") : unable to load shared library '/home/jbullard/scratch/hdf5/src/hdf5.so': libhdf5.so.6: cannot open shared object file: No such file or directory The solution is set LD_LIBRARY_PATH to /home/jbullard/scratch/hdf5_install/lib Then things work just fine. However, I dislike this option -- Is there any other way which things can be orchestrated completely at package install time? I don't want to go editing any files in the R installation; more like an option to append something to R's LD_LIBRARY_PATH w/in the Makevars.in of the package being installed (in this case, hdf5)? Details of platform below. As always, thanks in advance. jim R version 2.11.0 Under development (unstable) (2010-02-08 r51110) x86_64-unknown-linux-gnu locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=C 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 attached base packages: [1] stats graphics grDevices utils datasets methods base HDF5 Version 1.8.4 R hdf5 package: hdf5_1.6.9.tar.gz Linux mp-1246 2.6.31-19-generic #56-Ubuntu SMP Thu Jan 28 02:39:34 UTC 2010 x86_64 GNU/Linux
Dirk Eddelbuettel
2010-Mar-03 01:45 UTC
[Rd] linking hdf5, requires setting LD_LIBRARY_PATH
Unless I am missing something, this has nothing to do with hdf5 per se. See below. On 2 March 2010 at 16:20, bullard at stat.Berkeley.EDU wrote: | I am writing an R package to interface to hdf5 files (yes I know one | exists, the issue will be demonstrated using that package). I tend to like | to build/install things locally so that aspects of the system I am working | on don't cause problems later when attempting to install elsewhere. To | this end, I build and install the hdf5 libraries w/out incident: | | tar xzf hdf5-1.8.4.tar.bz2 | cd hdf5-1.8.4 | ./configure --prefix=/home/jbullard/scratch/hdf5_install | make && make install | | Now, I make a shared object using the following (I am compiling hdf5.c | directly in src of the hdf5 package): | | gcc -I/home/jbullard/projects/me/R-builder/lib64/R/include | -I/home/jbullard/scratch/hdf5_install/include -I/usr/local/include -fpic | -g -O2 -std=gnu99 -c hdf5.c -o hdf5.o | gcc -shared -L/usr/local/lib64 -o hdf5.so hdf5.o | -L/home/jbullard/scratch/hdf5_install/lib -lhdf5 -lz -lm | -L/home/jbullard/projects/me/R-builder/lib64/R/lib -lR | | I then start R and get the following error: | | Error in dyn.load("hdf5.so") : | unable to load shared library '/home/jbullard/scratch/hdf5/src/hdf5.so': | libhdf5.so.6: cannot open shared object file: No such file or directory | | The solution is set LD_LIBRARY_PATH to | /home/jbullard/scratch/hdf5_install/lib Of course. This is a dynamic library, and ld.so needs to find it. So if and when _you_ opt to depart from using standard locations, _you_ need to tell ld.so where to look. Setting LD_LIBRARY_PATH is one of several ways to do so. Others include a) the /etc/ld.so.conf file, b) (on newer linuxen) a file in the /etc/ld.so.conf.d/ directory c) encode the path at link time using the rpath argument. Rcpp and RInside provide examples of the last approach. Hth, Dirk | | Then things work just fine. However, I dislike this option -- Is there any | other way which things can be orchestrated completely at package install | time? I don't want to go editing any files in the R installation; more | like an option to append something to R's LD_LIBRARY_PATH w/in the | Makevars.in of the package being installed (in this case, hdf5)? | | Details of platform below. As always, thanks in advance. | | jim | | R version 2.11.0 Under development (unstable) (2010-02-08 r51110) | x86_64-unknown-linux-gnu | | locale: | [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C | [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 | [5] LC_MONETARY=C 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 | | attached base packages: | [1] stats graphics grDevices utils datasets methods base | | HDF5 Version 1.8.4 | R hdf5 package: hdf5_1.6.9.tar.gz | Linux mp-1246 2.6.31-19-generic #56-Ubuntu SMP Thu Jan 28 02:39:34 UTC | 2010 x86_64 GNU/Linux | | ______________________________________________ | R-devel at r-project.org mailing list | https://stat.ethz.ch/mailman/listinfo/r-devel -- Registration is open for the 2nd International conference R / Finance 2010 See http://www.RinFinance.com for details, and see you in Chicago in April!