构建使用RcpArmadillo、RcpEigen并依赖Cpp11插件的R包



我遵循了迄今为止在本网站或Dirk、Hadley或其他人发表的笔记中解释的关于此事的所有程序。然而,由于cpp11插件的问题,我在构建包时仍然存在问题。

我使用了RcppArmadillo.package.skeleton()函数。我把我的cpp文件放在src目录中。NAMESPACE文件看起来应该包含importFrom(Rcpp, sourceCpp)行。我还编辑了DESCRIPTION文件,在LinkingTo部分,我添加了RcpEigen和我使用的其他包。我终于在R中运行了compileAttributes(verbose=TRUE)函数,一切看起来都很好。因此,我认为我已经做了我应该做的一切。我还必须提到,当我使用sourceCpp()在R中编译代码时,它工作得很完美,编译时没有错误!为了更好地说明我的依赖关系,我在这里放了我的第一块代码:

#include <RcppArmadillo.h>
#include <RcppNumerical.h>
#include <RcppArmadilloExtensions/sample.h>
#include <Eigen/LU> 
#include <algorithm>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::depends(RcppNumerical)]]
// [[Rcpp::plugins(cpp11)]]

问题是,当我构建包时,我收到了与cpp11插件相关的auto类型的行的错误和警告。

在这个网站上搜索了类似的帖子后,我得出结论,我必须强制我的R编译器使用c++11,因此我编辑了位于~/.R/MakevarsMakvars文件,由于我使用MAC,我添加了这一行:CXX=clang++ -std=c++11到该文件。然而,当我这样做时,这3个错误消失了,但由于所有Armadillo变量类型(如mat、uvec等)都不再被识别,因此生成了50个新错误。所以我不知道怎么解决这个问题。

我认为基本上放// [[Rcpp::plugins(cpp11)]]应该处理好它,因为Rcpp的新版本支持这个插件,这可能就是为什么当我在R中运行sourceCpp时,我没有错误,一切看起来都很好。但我不知道构建包时会发生什么。我的Rcpp版本是0.12.8。提前感谢您的任何帮助。

依赖项(即其他标头)和编译器选项的插件供sourceCpp()使用。

程序包使用LinkingTo:执行此操作,对于C++11指令,要么src/Makevars,要么SystemRequirements。请参阅记录这一点的编写R扩展。

最新更新