R包调用的Fortran代码仅在Linux上导致segfault崩溃

R包调用的Fortran代码仅在Linux上导致segfault崩溃,r,linux,docker,fortran,gfortran,R,Linux,Docker,Fortran,Gfortran,我正在尝试使用R软件包。我可以让它在Windows机器上工作(示例(“censReg”、“smwrQW”))。但是,在Linux机器上运行相同的代码会导致我出现即时故障。我相信我已经跟踪到以下错误 您应该能够使用Docker和以下命令集重现此行为: docker pull rocker/tidyverse docker run -it rocker/tidyverse /bin/bash sudo apt-get install ed Rscript -e "devtools::instal

我正在尝试使用R软件包。我可以让它在Windows机器上工作(
示例(“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')"
该问题是由gfortran(6.3.0)的Docker版本与RTools中的版本不匹配引起的吗?看


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

我按照以下说明运行了gdb:

NORTEST
需要附加参数时:

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

我按照以下说明运行了gdb:

NORTEST
需要附加参数时:

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


我认为您需要放慢速度,并找出您正在研究的操作系统:A)没有RTools/travis。Rtools是用于Windows的。Travis通常使用的是一个古老的Ubuntu版本(但有办法获得当前的gcc/g++/gfortran.B),James的writeup是为macOS编写的,与您的其他问题几乎没有关系。另外:经验告诉我们,大多数segfault都是真正的bug。你以前在Windows上可能很幸运。Windows上的行为是一致的(我在多台机器上多次尝试过)。我同意,这可能是一个错误。只是想寻找一些线索来解释为什么travis Linux和Windows命令可以通过,而本地或Docker命令不能通过。我会尝试向下钻取,或者使用
gdb
或者大量使用print语句,看看它在哪里出错,哪些值导致了错误。当然,这可能“仅仅”是一个配置问题。我不知道,而且我没有时间安装五个大的软件包只是为了玩——对不起。如果您没有将gfortran编译器版本与gcc和gfortran库版本相匹配,那可能是一个问题。我认为您需要放慢速度,并找出您正在研究的操作系统:a)没有RTools/travis。Rtools是用于Windows的。Travis通常使用的是一个古老的Ubuntu版本(但有办法获得当前的gcc/g++/gfortran.B),James的writeup是为macOS编写的,与您的其他问题几乎没有关系。另外:经验告诉我们,大多数segfault都是真正的bug。你以前在Windows上可能很幸运。Windows上的行为是一致的(我在多台机器上多次尝试过)。我同意,这可能是一个错误。只是想寻找一些线索来解释为什么travis Linux和Windows命令可以通过,而本地或Docker命令不能通过。我会尝试向下钻取,或者使用
gdb
或者大量使用print语句,看看它在哪里出错,哪些值导致了错误。当然,这可能“仅仅”是一个配置问题。我说不出来,而且我没有时间安装五个大型软件包只是为了玩——对不起。如果您没有将gfortran编译器版本与gcc和gfortran库版本匹配,那可能是个问题。很好,您找到了错误。请向上游报告,以便下一个用户不会遇到相同的问题!这个错误的呼叫发生在哪里?在你自己的代码中还是在包中?@VladimirF它发生在包中。旧版Fortran编译器是否不要求指定所有参数?是的,这一直是必需的。很好,您发现了错误。请向上游报告,以便下一个用户不会遇到相同的问题!这个错误的呼叫发生在哪里?在你自己的代码中还是在包中?@VladimirF它发生在包中。旧版Fortran编译器是否不要求指定所有参数?是的,这一直是必需的。
SUBROUTINE NORTEST(CENSFLAG,DF,LLR,NOBSC,SRESID,PLEV,IERR)