由R包调用的Fortran代码仅在Linux上导致段错误崩溃

我正在尝试使用smwrQW R软件包。 我可以让它在Windows机器上工作( example("censReg", "smwrQW") )。 但是,在Linux机器上运行相同的代码会导致我立即发生段错误。 我相信我已经跟踪到以下行的错误。

您应该能够使用Docker和以下命令重现此行为:

 docker pull rocker/tidyverse docker run -it rocker/tidyverse /bin/bash sudo apt-get install ed Rscript -e "devtools::install_github('USGS-R/smwrBase')" Rscript -e "devtools::install_github('USGS-R/smwrGraphs')" Rscript -e "devtools::install_github('USGS-R/smwrStats')" Rscript -e "devtools::install_github('USGS-R/smwrQW')" Rscript -e "example('censReg', package = 'smwrQW')" 

Docker版本的gfortran(6.3.0)与RTools版本之间不匹配是否导致问题? 见http://www.thecoatlessprofessor.com/programming/rcpp-rcpparmadillo-and-os-x-mavericks-lgfortran-and-lquadmath-error/#the-solution

我遇到了两个令人费解的怪癖。 首先,如果我在上面链接的那一行之前设置了一个断点( browser() ),那么就没有错误。 其次,Travis的构建似乎已经过去了。

我按照http://r-pkgs.had.co.nz/src.html#src-debugging上的说明运行gdb:;

 Program received signal SIGSEGV, Segmentation fault. nortest (censflag=..., df=0, llr=0, nobsc=24, sresid=..., plev=0, ierr=<error reading variable: Cannot access memory at address 0x0>) at NORTEST.f:75 75 IERR = 0 

原来, NORTEST子程序所期望的一个变量( IERR )没有被传递。 修复了作业,没有更多的错误! 谢谢Dirk!

更新

我不知道为什么旧的代码在Windows上运行:

 CALL NORTEST(CENSFLAG,DF,LLRAML,NOBSC,SRESID,PLEVAML) 

NORTEST需要额外的参数时:

 SUBROUTINE NORTEST(CENSFLAG,DF,LLR,NOBSC,SRESID,PLEV,IERR)