【问题标题】:Compiling F77 with R CMD SHLIB for use in R package. Changing `-fmax-stack-var-size=`使用 R CMD SHLIB 编译 F77 以在 R 包中使用。更改 `-fmax-stack-var-size=`
【发布时间】:2021-11-10 20:05:48
【问题描述】:

我从 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 fortran fortran77


    【解决方案1】:

    是的,~/.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 编译器变量,详细信息见编写 R 扩展

    【讨论】:

    • 优秀。谢谢。我需要时间鼓起勇气打开 Writing R Extensions,但我会努力勇敢。我从来没有在 R 包中包含过 fortran 子例程,我希望它会很痛苦。
    • Naa,R 从第一天起就支持这一点。 NetLib 和 StatLib 等等。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2020-08-07
    • 2018-10-12
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多