簡體   English   中英

R軟件包無法在x64上運行示例,但可以在i386和Debian上運行

[英]R package fails to run examples on x64 but works on i386 and Debian

我在將軟件包加載到CRAN時遇到了麻煩。 我正在使用R Studio構建我的程序包和一些用於優化的較低級C代碼。 在R Studio中,我可以毫無問題地加載/構建/檢查程序包(我使用的是Mac btw)。 但是,當我生成該程序包並將其提交給CRAN時,將被以下拒絕:

Flavor: r-devel-windows-ix86+x86_64
Check: running examples for arch 'x64', Result: ERROR

在查看為我提供的日志后,這些示例在Debian和Windows i386上運行得很好。

有誰知道為什么我的示例無法在x64上運行但在i386上運行良好?

以下是00check.log中的代碼:

** running examples for arch 'i386' ... OK
** running examples for arch 'x64' ... ERROR
Running examples in 'fastcmprsk-Ex.R' failed
The error most likely occurred in:
.
.
.
> ### ** Examples
> 
> library(fastcmprsk)
> 
> set.seed(10)
> ftime <- rexp(200)
> fstatus <- sample(0:2, 200, replace = TRUE)
> cov <- matrix(runif(1000), nrow = 200)
> dimnames(cov)[[2]] <- c('x1','x2','x3','x4','x5')
> fit <- fastCrr(Crisk(ftime, fstatus) ~ cov, variance = FALSE)
* DONE
Status: 1 ERROR, 1 NOTE

我被認為是罪魁禍首是fastCrr函數。 但是,該示例對於arch'i386'(見上文)和Debian似乎運行良好。 我不明白為什么它無法在x64上運行,是否存在我不知道的硬件問題? 我正在調用的函數確實會為優化例程調用C 也許某處有泄漏,但是我仔細檢查並確保我Free每個Calloc變量。 我不確定還會發生其他泄漏,或者為什么泄漏只會特定於一個系統而不是其他系統。

希望這可以幫助。

感謝所有查看此內容的人以及您的反饋。

使用wch1/r-debug鏡像,我已在代碼上運行了UBSAN工具。 來自gcc的人發現了一些東西:

ralf@barra:~$ docker run --rm -it wch1/r-debug
root@9131acbabe1f:/# git clone https://github.com/erickawaguchi/fastcmprsk
root@9131acbabe1f:/# cd fastcmprsk/
root@9131acbabe1f:/fastcmprsk# git checkout developer
root@9131acbabe1f:/fastcmprsk# cd -
root@9131acbabe1f:/# RDsan -e "install.packages(c('doParallel', 'dynpred', 'codetools', 'survival'))"
root@9131acbabe1f:/# RDsan CMD build fastcmprsk
root@9131acbabe1f:/# RDsan CMD check fastcmprsk_1.0.3.tar.gz 
[...]
==5515==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6180002383d0 at pc 0x7ff3b5ad8d3f bp 0x7ffebeb2bb90 sp 0x7ffebeb2bb80  
READ of size 4 at 0x6180002383d0 thread T0
    #0 0x7ff3b5ad8d3e in ccd_dense /fastcmprsk.Rcheck/00_pkg_src/fastcmprsk/src/denseFit.c:148

實際上,在https://github.com/erickawaguchi/fastcmprsk/blob/319138af6dfe5414608a89dbb168ea1e0ab1a797/src/denseFit.c#L148中,您正在從ici中讀取數組邊界,因為測試i == (n - 1)測試ici[i + 1] != 1 即使我不確定為什么這會導致x64 Windows上的確定性失敗,我還是從這里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM