[Bioc-devel] libRblas and libRlapack are broken dependencies for packages in R 3.1.0 on Fedora 20

E N gifi2007 at hotmail.com
Tue May 6 21:29:17 CEST 2014

> 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.
>> Yes, I'm using the very R packaged by Fedora, this one to be more accurate: <https://stat.ethz.ch/pipermail/bioc-devel/2014-May/005706.html>
>>> 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

[@localhost ~]$ locate libblas

[@localhost ~]$ R CMD locate liblapack

[@localhost ~]$ R CMD locate libblas

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).


P.S. I left the whole conversation history in this mail to make it visible on the mailing list, which I should have done in my previous messages, sorry for my inadvertence.


More information about the Bioc-devel mailing list