我正在尝试编译旧版本的 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.so
和R-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
。