为什么R即使后来使用--with-blas = lblas`构建后也可以链接到共享的BLAS?

李哲源*_*李哲源 5 ubuntu r blas openblas

R安装和管理手册中BLAS部分说,当使用配置参数从源代码构建R时--without-blas,它将把Netlib的参考BLAS R_HOME/lib/libRblas.so与标准R共享库一起构建到一个独立的共享库中R_HOME/lib/libR.so。这使用户可以更轻松地在R环境中切换和基准化不同的调谐BLAS。该指南建议研究人员可以使用符号链接来libRblas.so实现此目的,本文对此提供更多详细信息。

相反,从R CRAN的镜像或Ubuntu的存储库(对于像我这样的Linux用户)简单地安装R的预编译二进制版本时,从理论上讲不重建R的情况下在不同的BLAS之间进行切换应该更困难,因为编译的R版本配置为--with-blas = (some blas library)。我们可以通过读取处的配置文件R_HOME/etc/Makeconf或查看的结果来轻松地进行检查R CMD config BLAS_LIBS。例如,在我的机器上,它返回-lblas,因此它在构建时链接到参考BLAS 。结果,没有R_HOME/lib/libRblas.so,只有R_HOME/lib/libR.so

但是,此R-blog表示,即使未从源代码安装R,也可以在BLAS之间进行切换。作者从ubuntu的存储库中尝试了ATLAS和OpenBLAS,然后使用update-alternatives --config来解决。也可以从源代码配置和安装经过调整的BLAS,通过将它们添加到“替代项”中update-alternatives --install,然后以相同的方式在它们之间进行切换。这种情况下的BLAS库(符号链接)位于/usr/lib/libblas.so.3ubuntu和R's下LD_LIBRARY_PATH。我已经测试过了,这确实可行!但是我很惊讶R如何做到这一点。 如我所说,R应该已经绑定到在构建时配置的BLAS库,即,我希望所有BLAS例程都集成到R_HOME/lib/libR.so。那么,为什么仍然可以通过更改BLAS /usr/lib/libblas.so.3

谢谢,如果有人可以解释一下。