Date: Tue, 6 May 2014 09:44:16 -0700
From: mtmorgan at fhcrc.org
To: gifi2007 at hotmail.com
Subject: Re: [Bioc-devel] libRblas and libRlapack are broken dependencies for packages in R 3.1.0 on Fedora 20
On 05/06/2014 09:28 AM, E N wrote:
From: mtmorgan at fhcrc.org
To: gifi2007 at hotmail.com; bioc-devel at r-project.org
Subject: Re: [Bioc-devel] libRblas and libRlapack are broken dependencies for packages in R 3.1.0 on Fedora 20
Let's focus on preprocessCore, which does not have any additional dependencies.
Also, I assume you mean that you are using R that comes with the fedora package
manager, rather than the R that is redistributed by Rstudio.
If you could provide the output of
R CMD config BLAS_LIBS
and the full output of
R -e "library(BiocInstaller); biocLite('preprocessCore')"
again using the R that is installed with the fedora package manager, then that
would help to understand your problem.
If your problem is only with the version of R distributed by Rstudio, then as I
understand it the solution is in the hands of Rstudio, and I am sure they will
respond promptly.
Martin
Please find provided below the commands outputs:
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[@localhost ...]$ R CMD config BLAS_LIBS
-lblas
[@localhost ...]$ R -e "library(BiocInstaller); biocLite('preprocessCore')"
R version 3.1.0 (2014-04-10) -- "Spring Dance"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
library(BiocInstaller); biocLite('preprocessCore')
Bioconductor version 2.14 (BiocInstaller 1.14.2), ?biocLite for help
BioC_mirror: http://bioconductor.org
Using Bioconductor version 2.14 (BiocInstaller 1.14.2), R version
3.1.0.
Installing package(s) 'preprocessCore'
trying URL 'http://bioconductor.org/packages/2.14/bioc/src/contrib/preprocessCore_1.26.0.tar.gz'
Content type 'application/x-gzip' length 120387 bytes (117 Kb)
opened URL
==================================================
downloaded 117 Kb
* installing *source* package ?preprocessCore? ...
checking for gcc... gcc -m64 -std=gnu99
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -m64 -std=gnu99 accepts -g... yes
checking for gcc -m64 -std=gnu99 option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -m64 -std=gnu99 -E
checking for library containing pthread_create... -lpthread
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for stdlib.h... (cached) yes
checking if PTHREAD_STACK_MIN is defined... yes
configure: creating ./config.status
config.status: creating src/Makevars
[...]
gcc -m64 -std=gnu99 -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -flto -fpic -Wl,-z,relro -o preprocessCore.so R_colSummarize.o R_plmd_interfaces.o R_plmr_interfaces.o R_rlm_interfaces.o R_subColSummarize.o R_subrcModel_interfaces.o avg.o avg_log.o biweight.o init_package.o lm.o log_avg.o log_median.o matrix_functions.o median.o median_log.o medianpolish.o plmd.o plmr.o psi_fns.o qnorm.o rlm.o rlm_anova.o rlm_se.o rma_background4.o rma_common.o weightedkerneldensity.o -lpthread -llapack -lblas -lgfortran -lm -lquadmath -L/usr/lib64/R/lib -lR
/usr/bin/ld: cannot find -llapack
/usr/bin/ld: cannot find -lblas
This is really about fedora system configuration; R has been built by linking to
system-provided lapack and blas, but now R cannot find those libraries. Do they
exist ?
locate liblapack
locate libblas
R CMD locate liblapack
R CMD locate libblas
if not then there is somehow a missing dependency (on system-provided rather
than R-provided lapack and blas) in the fedora R package. Presumably you can
work around this by installing the lapack / blas dependency manually (i.e.,
through the fedora package manager), and getting Tom Callaway to update the
dependencies in R-3.1.0-4.fc20.src.rpm (although I see there that bals-devel>=
3.0 is already require'd.
Partly I am 'shooting in the dark', so if I am missing something please excuse
my errors.
Martin
collect2: error: ld returned 1 exit status
make: *** [preprocessCore.so] Error 1
ERROR: compilation failed for package ?preprocessCore?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
The full compilation output is the enclosed file. Errors come from the way R was builf for Fedora 20 and the previously mentioned Tom seems to be steady on the library dependencies management: "This is because we're building R with the system blas/lapack instead of their bundled copy (something we should have done a while ago)."
***something we should have done a while ago***
Regards,
Eric.
[@localhost ~]$ locate liblapack
/usr/lib64/atlas/liblapack.so.3
/usr/lib64/atlas/liblapack.so.3.0
[@localhost ~]$ locate libblas
/usr/lib64/libblas.so.3
/usr/lib64/libblas.so.3.4
/usr/lib64/libblas.so.3.4.2
[@localhost ~]$ R CMD locate liblapack
/usr/lib64/atlas/liblapack.so.3
/usr/lib64/atlas/liblapack.so.3.0
[@localhost ~]$ R CMD locate libblas
/usr/lib64/libblas.so.3
/usr/lib64/libblas.so.3.4
/usr/lib64/libblas.so.3.4.2
R finds its BLAS and LAPACK dependencies, but packages can't. I'm neither a system packager nor an R package writer, but from the Tom Callaway's message I understood the following:
+prior R-3.1.0 on Fedora, packages could link to BLAS & LAPACK bundled with R regardless the system (un)provided similar libraries;
+since that R release, packages can no more search dependencies within R shared lib, they ought use the system ones.
Let's reuse 'preprocessCore' as an example. When <grep -nri 'lapack'> is applied to its sources, there are outputs for "matrix_functions.c" and "matrix_functions.c". Both files carry the following includes:
#include <R_ext/Rdynload.h>
#include <R.h>
#include <Rdefines.h>
#include <Rmath.h>
#include <Rinternals.h>
I suspect the problems stem from there. If I didn't miss Tom Callaway's point so far, such includes should be replaced by system's (i.e. Fedora).