史上最麻烦的linux下R源码安装(有/无root权限)

本文记录的是linux下R安装的心得,windows下的安装方法请自行google:
先说有root权限的时候:
官网上下载R源码:找到latest release 版本:R-3.5.1.tar.gz

https://mirrors.tuna.tsinghua.edu.cn/CRAN/

官网图

解压,进入路径

tar -zxvf R-3.5.1.tar.gz 
cd R-3.5.1
./configure

有报错:

configure: error: --with-readline=yes (default) and headers/libs are not available

设置如下参数: ./configure --with-readline=no
或者centos系统:安装readline:yum install readline-devel
或者ubuntu系统:安装readline:

安装成功后继续./configure 又出现报错:

configure: error: --with-x=yes (default) and X11 headers/libs are not available

设置参数 --with-x=no
或者安装x:

yum install libX11-devel 
yum install libXt-devel  

继续
./configure --with-readline=no --with-x=no
还报错:没有装libzma

configure: error: "liblzma library and headers are required"

解决方法:

wget https://tukaani.org/xz/xz-5.2.4.tar.gz
tar -zxvf xz-5.2.4.tar.gz
cd xz-5.2.4/
./configure
make
make install

安装完成xz,无报错,再来继续编译R
./configure --with-readline=no --with-x=no
又报错:没有pcre

checking whether PCRE support suffices... configure: error: pcre >= 8.20 library and headers are required

解决方法:

wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz
tar -zxvf pcre-8.42.tar.gz
cd pcre-8.42.tar.gz
./configure
make
make install

安装完成pcre,无报错,再来继续编译R
./configure --with-readline=no --with-x=no
又报错:没有libcurl

configure: error: libcurl >= 7.22.0 library and headers are required with support for https

解决方法:

wget https://curl.haxx.se/download/curl-7.61.0.tar.gz
tar -zxvf curl-7.61.0.tar.gz
cd curl-7.61.0/
./configure
make
make install

安装完成curl,无报错,再来继续编译R
./configure --with-readline=no --with-x=no
又报错:

configure: error: libcurl >= 7.22.0 library and headers are required with support for https

好像上一步的libcurl没有安装成功呐?奇怪,
仔细观察了一下,发现虽然是以root下载的,但是解压后的目录是以用户拥有的方式,于是
用sudo的方式试一次:

sudo ./configure
make
make install
安装完成,无报错

再来安装R
./configure --with-readline=no --with-x=no
报错:

configure: error: libcurl >= 7.22.0 library and headers are required with support for https

还是这个错。。。。。
已奔溃。。。

$ curl -V
curl 7.60.0 (x86_64-conda_cos6-linux-gnu) libcurl/7.60.0 OpenSSL/1.0.2o zlib/1.2.11
Release-Date: 2018-05-16
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy

看版本,已经是7.60了呀。
有人说要下载libcurl-devel,

wget http://mirrors.163.com/centos/7/os/x86_64/Packages/libcurl-devel-7.29.0-46.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/libcurl-7.29.0-46.el7.x86_64.rpm

rpm -ivh libcurl-devel-7.29.0-46.el7.x86_64.rpm libcurl-7.29.0-46.el7.x86_64.rpm

试了还是不行,最后。。。
用别的用户名登录,不用root登录

./configure --with-readline=no --with-x=no
···
R is now configured for x86_64-pc-linux-gnu
  Source directory:          .
  Installation directory:    /usr/local
  C compiler:                gcc -std=gnu99  -g -O2
  Fortran 77 compiler:       gfortran  -g -O2
  Default C++ compiler:      g++   -g -O2
  C++98 compiler:            g++ -std=gnu++98 -g -O2
  C++11 compiler:            g++ -std=gnu++11 -g -O2
  C++14 compiler:
  C++17 compiler:
  Fortran 90/95 compiler:    gfortran -g -O2
  Obj-C compiler:
  Interfaces supported:
  External libraries:        readline, curl
  Additional capabilities:   NLS
  Options enabled:           shared BLAS, R profiling
  Capabilities skipped:      PNG, JPEG, TIFF, cairo, ICU
  Options not enabled:       memory profiling
  Recommended packages:      yes
configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages

最后只有三个无关紧要的提醒。
赶紧
sudo make
输入了密码
sudo make install
成功了 但是使用时还是没有有问题,没有libR.so??

当没有安装bzip2时会报错如下:

checking whether bzip2 support suffices... configure: error: bzip2 library and headers are required

最后。。。
一怒之下删掉了安装了所有版本R,

rm -rf /usr/bin/R*
rm -rf /usr/local/bin/R*
删掉了安装的所有bzip2,
rm -rf /usr/local/bin/bz*
rm -rf /usr/local/include/bz*
yum remove bzip2
重新解压 bzip2
tar -zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make -f Makefile-libbz2_so
修改Makefile其中两行。
vi Makefile
CC=gcc -fPIC
CFLAGS=-Wall -fPIC -Winline -O2 -g $(BIGFILES)

然后
make
make install
然后安装R
将原来R解压的路径也删掉了
重新解压R包

tar -zxvf R-3.5.1.tar.gz
cd R-3.5.1
./configure --enable-R-shlib
居然没有报错
make
make install

都没有报错。。。。。。


重点来了

将R安装到指定路径下:在没有root权限时,我们只能安装在指定目录下。

要想安装到指定目录中则需要指定: --prefix=/path/to/install/
./configure --enable-R-shlib,先根据报错将依赖的各种库都装上。安装时也要指定路径,一般情况下我会将其安装在解压后的该目录。
先后安装了zlib,bzip2,xz,curl.
然后编译的时候要加上LDFLAGS和CPPFLAGS相关的路径:

./configure --prefix=$HOME/Programme/R-3.3.1 --enable-R-shlib LDFLAGS="-L/$HOME/Programme/zlib-1.2.11/lib -L/$HOME/Programme/bzip2-1.0.6/lib -L/$HOME/Programme/xz-5.2.3/lib -L/$HOME/Programme/pcre-8.40/lib -L/$HOME/Programme/curl-7.52.1/lib" CPPFLAGS="-I/$HOME/Programme/zlib-1.2.11/include -I/$HOME/Programme/bzip2-1.0.6/include -I/$HOME/Programme/xz-5.2.3/include -I/$HOME/Programme/pcre-8.40/include -I/$HOME/Programme/curl-7.52.1/include"

然而还是会报错:


报错:

/usr/bin/ld: warning: libpcre.so.1, needed by ../../lib/libR.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: liblzma.so.5, needed by ../../lib/libR.so, not found (try using -rpath or -rpath-link) 
../../lib/libR.so: undefined reference to `pcre_fullinfo' 
../../lib/libR.so: undefined reference to `lzma_lzma_preset@XZ_5.0' 
../../lib/libR.so: undefined reference to `lzma_alone_decoder@XZ_5.0' 
../../lib/libR.so: undefined reference to `lzma_crc64@XZ_5.0' 
../../lib/libR.so: undefined reference to `lzma_raw_encoder@XZ_5.0' 
../../lib/libR.so: undefined reference to `pcre_config' 
../../lib/libR.so: undefined reference to `lzma_code@XZ_5.0' 
../../lib/libR.so: undefined reference to `lzma_stream_decoder@XZ_5.0' 
../../lib/libR.so: undefined reference to `pcre_free' 
../../lib/libR.so: undefined reference to `lzma_raw_decoder@XZ_5.0' 
../../lib/libR.so: undefined reference to `pcre_free_study' 
../../lib/libR.so: undefined reference to `pcre_assign_jit_stack' 
../../lib/libR.so: undefined reference to `pcre_exec' 
../../lib/libR.so: undefined reference to `lzma_version_string@XZ_5.0' 
../../lib/libR.so: undefined reference to `pcre_maketables' 
../../lib/libR.so: undefined reference to `lzma_stream_encoder@XZ_5.0' 
../../lib/libR.so: undefined reference to `pcre_compile' 
../../lib/libR.so: undefined reference to `pcre_study' 
../../lib/libR.so: undefined reference to `pcre_version' 
../../lib/libR.so: undefined reference to `lzma_end@XZ_5.0' 
../../lib/libR.so: undefined reference to `pcre_jit_stack_alloc' 
collect2: error: ld returned 1 exit status 
make[3]: *** [R.bin] Error 1 
make[3]: Leaving directory `/builder/software/R/src/main' 
make[2]: *** [R] Error 2 
make[2]: Leaving directory `/builder/software/R/src/main' 
make[1]: *** [R] Error 1 
make[1]: Leaving directory `/builder/software/R/src' 
make: *** [R] Error 1

重点来了:

/usr/bin/ld: warning: libpcre.so.1, needed by ../../lib/libR.so, not found (try using -rpath or -rpath-link)
怎么会有这样的报错?编译的时候不是已经将这两个库的路径传入了呀?
一番搜索后,
有人提出

要添加动态库
#cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/opt/pcre-8.39/lib
/opt/xz-5.2.2/lib
然后执行
#ldconfig

但是我没有root权限啊,于是再一帆研究,根据报错提示,设置一下-rpath看行不行。
修改Makeconf文件,再LDFLAGS这里加上了-Wl,-rpath后面跟这两个库的路径,

LDFLAGS = -L/BIGDATA1/cygene_sydu_1/02.dropEst/zlib-1.2.11/lib -L/BIGDATA1/cygene_sydu_1/02.dropEst/bzip2-1.0.6/lib -L/BIGDATA1/cygene_sydu_1/02.dropEst/xz-5.2.4/lib -L/BIGDATA1/cygene_sydu_1/02.dropEst/pcre-8.42/lib -L/BIGDATA1/cygene_sydu_1/02.dropEst/curl-7.61.0/lib -Wl,-rpath=/BIGDATA1/cygene_sydu_1/02.dropEst/pcre-8.42/lib -Wl,-rpath=/BIGDATA1/cygene_sydu_1/02.dropEst/xz-5.2.4/lib

再进行make,make install就不会报错,完成安装。
或者在编译的时候直接将-Wl,-rpath=/的路径跟在LDFLAGS里面,要写两次哦。

补充:
如果遇到如下报错

begin installing recommended package Matrix
ERROR: failed to lock directory ‘/BIGDATA1/cygene_sydu_1/software/R-3.5.1/library’ for modifying
Try removing ‘/BIGDATA1/cygene_sydu_1/software/R-3.5.1/library/00LOCK-Matrix’
make[2]: *** [Matrix.ts] Error 1
make[2]: Leaving directory `/BIGDATA1/cygene_sydu_1/software/R-3.5.1/src/library/Recommended'
make[1]: *** [recommended-packages] Error 2
make[1]: Leaving directory `/BIGDATA1/cygene_sydu_1/software/R-3.5.1/src/library/Recommended'
make: *** [stamp-recommended] Error 2

这里是开始安装某个package时失败了,那么想让它跳过,不安装就好了,在提示的报错信息中找到安装该package的路径,把里面的相应的package删掉即可,我这里删掉了Martrix包;
rm /BIGDATA1/cygene_sydu_1/software/R-3.5.1/src/library/Recommended/Matrix*

等R安装成功后再手动将这些包装上。

R 包的安装

R的package安装时遇到错误可以换镜像路径,举例如下:
install.packages("Rcpp",dependencies=TRUE, repos='http://cran.rstudio.com/')
install.packages("ggplot2",dependencies=TRUE, repos='http://cran.rstudio.com/')

R ggforce 包安装

install.packages("ggforce")
library(ggforce)

# geom_circle() 是来自ggforce这个包。用法跟ggplot一样:

ggplot(df.venn, aes(x0=x, y0=y, r= 1.5, fill = labels)) +
  geom_circle(alpha=.3, size=1, colour='grey') +
  coord_fixed() + theme_void()

关于bioconductor

R limma 包安装

source("http://www.bioconductor.org/biocLite.R")
biocLite("limma")
library(limma)

R tidyverse包安装

source("http://www.bioconductor.org/biocLite.R")
biocLite("tidyverse")
library(tidyverse)

其他包安装

source("[http://bioconductor.org/biocLite.R](http://bioconductor.org/biocLite.R)")
biocLite("ALL") 安装 ALL
biocLite("hgu95av2.db")

library(ALL)
library(hgu95av2.db)

总结:

Ubuntu下基本上可以通过安装这些库解决:

sudo apt-get install build-essential
sudo apt-get install fort77 (error)
sudo apt-get install xorg-dev
sudo apt-get install liblzma-dev libblas-dev gfortran
sudo apt-get install gcc-multilib
sudo apt-get install gobjc++ (error)
sudo apt-get install aptitude
sudo apt-get install libreadline-dev

最简单的安装R的方法是:通过conda安装,先安装annaconda2或3,再通过conda install R,就可以一键安装R,非常方便,绕过手动源码安装。省好多事

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容