在 Ubuntu 13.10(或更新版本)上编译旧版本的 R(2.11 或更早版本)?

在 Ubuntu 13.10(或更新版本)上编译旧版本的 R(2.11 或更早版本)?

我正在尝试编译旧版本的 R(具体来说是 2.11.1)。你可能会问“为什么?”好吧,我有一个程序正在尝试运行(不是我写的,但我希望在我的研究中使用),它是用“旧”R 编写的,程序编写者特别提到 R-2.11.1 或更早版本必须使用。

  • 我运行./configure后没有出现明显的错误(整个输出太长,无法在这里发布,但我被警告说我无法制作 PDF、DVI 或 HTML 版本的帮助页面,但我对此并不太担心)。

  • 接下来,当我传递make命令时,遇到了以下错误(在一长串成功的命令之后):

    Warning in solve.default(rgb):
    unable to load shared library '/home/sbowerma/Programs/R-2.11.1/modules//lapack.so':
    /home/sbowerma/Programs/R-2.11.1/lib/libRlapack.so: undefined symbol: _gfortran_compare_string
    Error in solve.default(rgb) : lapack routines cannot be loaded
    Error: unable to load R code in package 'grDevices'
    Execution halted
    

然而,我已经确认图书馆lapack.so确实位于它应该所在的准确位置。

答案1

构建R-2.11.1过程似乎默认编译其自己的 BLAS 和 LAPACK 库版本(asR-2.11.1/lib/libRblas.soR-2.11.1/lib/libRlapack.so)——即使这些库的系统版本可用。由于我无法确定的原因,这些本地构建的库似乎无法正确链接gfortran运行时库(至少在 64 位 Ubuntu 13.10 上不是)。

使用./configure --help你会看到

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-blas             use system BLAS library (if available), or specify
                          it [no]
  --with-lapack           use system LAPACK library (if available), or specify
                          it [no]

因此,解决方法是确保系统上安装了适当的 BLAS/LAPACK(或 ATLAS)开发包,然后将--with-blas--with-lapack选项添加到配置中,例如

./configure --with-blas --with-lapack --prefix=/usr/local

配置报告现在应该显示类似

External libraries:      readline,BLAS(generic),LAPACK(generic)

然后你就应该能够完成make

相关内容