dyn.load()
R(3.3.2,Windows 7)在 for 循环中使用大约 1000 次迭代后崩溃。这在 Ubuntu 中不会发生。dll
对于从Rcpp
和代码创建的文件,可以观察到这种行为TMB
,但我认为它与这些包中的任何一个都无关。崩溃消息是:
Problem Event Name: APPCRASH
Application Name: rsession.exe
Application Version: 1.0.136.0
Application Timestamp: 583f5668
Fault Module Name: testRcppRepeatDynLoad.dll
以下是我计算机上的一个最小可重现示例:
首先,创建一个Rcpp
名为的包testRcppRepeatDynLoad
(在 Rstudio 中,在新目录中创建包,选择“使用 Rcpp 创建包”。)。构建包时会在文件夹中CTRL-SHIFT-B
创建一个dll
文件src
,我们将使用dyn.load
.
此代码在 1050 次迭代后使 R 会话崩溃:
while (i < 2000) {
i = i + 1
print(i)
dyn.load('src/testRcppRepeatDynLoad.dll')
dyn.unload('src/testRcppRepeatDynLoad.dll')
}
同样的事情发生dll
在由TMB::compile
.