使用 R CMD SHLIB 编译 F77 以用于 R 包。改变`-fmax-stack-var-size=`
Compiling F77 with R CMD SHLIB for use in R package. Changing `-fmax-stack-var-size=`
我从 1980 年代继承了一些 F77 代码,我想最终在 CRAN 上的 R 包中使用这些代码。基本上,我会将用 .Call
直接用 R 编写的慢速函数替换为运行速度快 100 倍的 F77 子例程。我过去用 C 做过类似的繁重工作。但是,当我通过 R CMD SHLIB
编译 fortran 子例程时,我收到一条警告,其中一个数组“大于‘-fmax-stack-var-size=’设置的限制”。我可以通过 gfortran
显式编译并适当地设置 -fmax-stack-var-size
来解决这个问题。但是,如何在 运行 R CMD SHLIB
时设置标志?在 Makevars
文件中?最终,我会将其包含在新版本中并提交给 CRAN,我想避免任何问题。非常感谢。
是的,在 ~/.R/Makevars
中用于 您的 编译,在 src/Makevars
中用于软件包的所有构建。 CRAN 对哪些选项是可移植的有意见,因此您可能无法使用 src/Makevars
.
中的选项
这是我的资料:
edd@rob:~$ grep ^F .R/Makevars
FLAGS=-Wall -O3 -g -pipe $(PEDANTIC) $(XTRAFLAGS)
FFLAGS=-O3 -g0 -Wall -pipe
FCFLAGS=-O3 -g0 -Wall -pipe
FC=$(CCACHE) gfortran
F77=$(CCACHE) gfortran
F95=$(CCACHE) gfortran
edd@rob:~$
其中一些其他值是您可以推测的先前设置的。请注意,有几个 Fortran 编译器变量,如往常一样在 Writing R Extensions.
中详细说明
我从 1980 年代继承了一些 F77 代码,我想最终在 CRAN 上的 R 包中使用这些代码。基本上,我会将用 .Call
直接用 R 编写的慢速函数替换为运行速度快 100 倍的 F77 子例程。我过去用 C 做过类似的繁重工作。但是,当我通过 R CMD SHLIB
编译 fortran 子例程时,我收到一条警告,其中一个数组“大于‘-fmax-stack-var-size=’设置的限制”。我可以通过 gfortran
显式编译并适当地设置 -fmax-stack-var-size
来解决这个问题。但是,如何在 运行 R CMD SHLIB
时设置标志?在 Makevars
文件中?最终,我会将其包含在新版本中并提交给 CRAN,我想避免任何问题。非常感谢。
是的,在 ~/.R/Makevars
中用于 您的 编译,在 src/Makevars
中用于软件包的所有构建。 CRAN 对哪些选项是可移植的有意见,因此您可能无法使用 src/Makevars
.
这是我的资料:
edd@rob:~$ grep ^F .R/Makevars
FLAGS=-Wall -O3 -g -pipe $(PEDANTIC) $(XTRAFLAGS)
FFLAGS=-O3 -g0 -Wall -pipe
FCFLAGS=-O3 -g0 -Wall -pipe
FC=$(CCACHE) gfortran
F77=$(CCACHE) gfortran
F95=$(CCACHE) gfortran
edd@rob:~$
其中一些其他值是您可以推测的先前设置的。请注意,有几个 Fortran 编译器变量,如往常一样在 Writing R Extensions.
中详细说明