使用Fortran源代码的R包:如何在“pkgname / src /”下创建“Makevars”文件?

时间:2016-10-17 17:35:19

标签: r makefile fortran gfortran r-package

与我过去的问题OS X package installation issue: Can't find gfortran 4.8 to build package的解决方案相关, 我在〜/ .R /中有Makevars。这允许我构建R包并在我的系统上本地工作。

现在我想让这个包可移植。我尝试将此Makevars移动到src文件夹并出现以下错误:

 * installing *source* package ‘pkgname’ ...
 ** libs
 gfortran-4.8  -fPIC -Wall -g -O2  -c  epidata.f95 -o epidata.o
 make: gfortran-4.8: No such file or directory
 make: *** [epidata.o] Error 1
 ERROR: compilation failed for package ‘pkgname’
 * removing ‘/Users/Vineetha/Desktop/pkgname.Rcheck/pkgname’

如何解决此问题?

1 个答案:

答案 0 :(得分:4)

好的我现在认为我理解了这个问题。

您已使用维基上gfortranbinaries page的gfortran。

您已调整~/.R/Makevars/,以便宏FCF77FLIBS指向正确的二进制文件和库。

您将Makevars移至包src文件夹,以使您的包可移植。你假设它是便携式的。您假设(或希望)R包构建器将尊重您选择的编译器。但是它并没有这样做。

当R构建一个包时,它将始终使用用于构建您正在使用的R版本的编译器。您无法覆盖包Makevars中的上述宏。这些宏只能在中更改 ~/.R/Makevars/

你最有可能使用的R版本是在OS X mavericks上使用经过特殊编译的gfortran 4.8.2编译的。这就是R抱怨的。它可以从here获得。您必须使用终端将压缩文件解压缩到正确的位置。但是,您无法安装该版本的gfortran,因为它会部分覆盖您的6.1版本。 所以不要这样做!

您无需担心正在使用gfortran 6.1。请参阅(修补)R installation and administration manual的第57页。

它声明您可以并且可以使用从CRAN获得的R二进制版本使用的gfortran。

因此无需可以将您的~/.R/Makevars/移开。

要检查软件包的可移植性,您可以将其发送到winbuilder服务。或者使用Linux虚拟机。

要保留Fortran源便携包,请不要使用该编译器的任何扩展,也不要使用特定于该版本编译器的Fortran扩展。

简而言之,您不必解决您提到的问题。只需编写可移植代码。