R源码编译安装

R源码编译安装

  • 前言
    • 安装包下载
    • 依赖包下载安装
    • 编译R
    • 总结

前言

一般尽可能的使用编译好的R,或者使用miniconda安装R。 但是使用conda安装一些R包时会遇到各种各样的错误,同时如果需要使用更高版本的R,源码编译则是最好选择。安装过程中不断出现的报错让人头疼,这里简要记录安装遇到的报错及解决,有参考网上其他教程,一并谢过。 常见过程一笔带过。

安装包下载

环境:CentOS release 6.9
下载 R-3.6.0.tar.gz

wget https://cran.r-project.org/src/base/R-3/R-3.6.0.tar.gz
tar -zxvf R-3.6.0.tar.gz

依赖包下载安装

非root用户一般都会缺少一些依赖包。可以提前安装,也可以 ./configure 之后查看报错,安装对应依赖。需要安装的依赖:

  • zlib-1.2.11.tar.gz
  • bzip2-1.0.6.tar.gz
  • xz-5.2.4.tar.gz
  • pcre-8.43.tar.gz (configure时 可能要设置个别参数)

编译R

  1. configure
    中间可能遇到的问题,参考一篇文章, 在configure 步骤已设置相关参数。
 ./configure  --prefix=/path/to/install/R_3.6.0  --enable-R-shlib  CPPFLAGS="-I/path_to/zlib_1.2.11/include -I/path_to/bzip2-1.0.6/include -I/path_to/xz-5.2.4/include -I/path_to/pcre-8.43/include -I/path_to/curl-7.65.3/include  -I/usr/include -fPIC" LDFLAGS="-L/path_to/zlib_1.2.11/lib -L/path_to/bzip2-1.0.6/lib -L/path_to/xz-5.2.4/lib  -L/path_to/pcre-8.43/lib -Wl,-rpath=/path_to/xz-5.2.4/lib -Wl,-rpath=/path_to/pcre-8.43/lib -L/path_to/curl-7.65.3/lib -L/path_to/icu/source/lib/ -L/usr/lib -L/usr/lib64 -fPIC"
  • CPPFLAGS,指定头文件路径;
  • LDFLAGS, 指定链接器需要的库文件路径;
  • -fPIC,编译阶段产生与位置无关的so文件;
  • -rpath,解决编译时能找到动态库但是执行时 找不到的问题;
  1. make

遇到报错如下:


../../lib/libR.so: undefined reference to `ucol_strcollIter_58'
../../lib/libR.so: undefined reference to `u_getVersion_58'
../../lib/libR.so: undefined reference to `uloc_setDefault_58'
../../lib/libR.so: undefined reference to `ucol_close_58'
../../lib/libR.so: undefined reference to `ucol_getLocaleByType_58'
../../lib/libR.so: undefined reference to `ucol_setAttribute_58'
../../lib/libR.so: undefined reference to `u_versionToString_58'
../../lib/libR.so: undefined reference to `ucol_open_58'
../../lib/libR.so: undefined reference to `uiter_setUTF8_58'
../../lib/libR.so: undefined reference to `ucol_setStrength_58'
collect2: ld returned 1 exit status
make[3]: *** [Makefile:145: R.bin] Error 1
make[3]: Leaving directory '/software/R-3.6.0/src/main'
make[2]: *** [Makefile:136: R] Error 2
make[2]: Leaving directory '/software/R-3.6.0/src/main'
make[1]: *** [Makefile:28: R] Error 1
make[1]: Leaving directory '/software/R-3.6.0/src'
make: *** [Makefile:61: R] Error 1

经搜索查询,可能是icu版本问题,有一篇相关 帖子。
解决:下载icu4c-58_2-src.tgz ,然后解压,直接在LDFLAGS中指定 -L/path/to/icu/source/lib/ ,重新configure ,make;

  1. make install
    安装成功

总结

绝大部分报错都是依赖库没有找到,解决就是找到对应的依赖库,然后指定路径即可安装成功。

你可能感兴趣的:(R,R安装编译)