在R包和CRAN检查中分配TMB功能
我在Rcpp的/src-8中有9个cpp文件,在TMB中有1个。我可以编译所有代码并成功运行,或者通过CRAN检查。但不是两者都有 方法1 让R编译所有cpp文件并生成单个DLL:'mypackage.DLL'和在R包和CRAN检查中分配TMB功能,r,rcpp,tmb,R,Rcpp,Tmb,我在Rcpp的/src-8中有9个cpp文件,在TMB中有1个。我可以编译所有代码并成功运行,或者通过CRAN检查。但不是两者都有 方法1 让R编译所有cpp文件并生成单个DLL:'mypackage.DLL'和TMB::MakeADfun(…,DLL=“mypackage”): 通过所有起重机检查(除了安装的包装尺寸注释,见下文) Rcpp函数运行良好 调用TMB函数会导致: .Call中出错(“getParameterOrder”,数据,参数,new.env(),PACKAGE=DLL)
TMB::MakeADfun(…,DLL=“mypackage”)
:
- 通过所有起重机检查(除了安装的包装尺寸注释,见下文)李>
- Rcpp函数运行良好
- 调用TMB函数会导致:
.Call中出错(“getParameterOrder”,数据,参数,new.env(),PACKAGE=DLL): “getParameterOrder”不适用于包“mypackage”的.Call()
- 使用
会导致:TMB::MakeADFun(…,DLL=“mypackage”,checkParameterOrder=FALSE)
.Call中出错(“TMBconfig”,e,as.integer(1),PACKAGE=DLL): “TMBconfig”不适用于包“mypackage”的.Call()
useDynLib MyTMB
和TMB::MakeADfun(…,DLL=“MyTMB”)
,并创建两个DLL(mypackage.DLL和MyTMB.DLL):
makevars.win:
all: MyTMB.dll
MyTMB.dll: MyTMB.cpp
$(R_HOME)/bin$(R_ARCH_BIN)/Rscript --vanilla -e "TMB::compile('MyTMB.cpp', safebounds=FALSE, safeunload=FALSE)"
clean:
rm -rf *o
- Rcpp和TMB功能都可以工作
- devtools::check()会对每个Rcpp函数产生一个警告:
checking foreign function calls ... WARNING Foreign function calls to a different package: .Call("_rcppfunction1", ..., PACKAGE = "mypackage")
- 还有一个关于大安装包尺寸的注意事项。
子目录的大小超过30 Mb,大约是方法1的两倍李>libs
- 修改“makevars”以恢复避免警告的Rcpp默认值,并请求CRAN接受关于已安装软件包大小的说明。不知道如何做前者李>
- 找到解决方法1问题的方法,并请求安装较小的软件包。只有一个dll是最简单的解决方案。不确定问题是否是由于我同时编译Rcpp和TMB引起的,如果是,如何修复它
- 或者其他我错过的东西
拱门x86_64
os mingw32
系统x86_64,mingw32
状态
专业3
minor 3.3GetPareMetErrorder错误是因为缺少dyn.load()?我应该说清楚-我在方法1的命名空间中使用了
useDynLib(mypackage)
,Rcpp代码工作正常,即找到dll。抱歉,这没有回答您的问题,但是我想知道如何让方法2从Rcpp
文件编译mypackage.dll
?当我使用自定义makefile.win
编译TMB
文件时,我得到以下错误:library.dynam(lib,package,package.lib)中的错误:未找到DLL'debugrcpp':可能未为此体系结构安装?
,也就是说,如果提供了makefile
,它就不会编译Rcpp
文件。@Alex你的makefile看起来像我的吗?我的Rcpp是自动编译的,TMB生成文件似乎没有影响它。我的生成文件看起来和你的相似。我使用链接线程中的一个: