我遵循了迄今为止在本网站或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/Makevars
的Makvars文件,由于我使用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扩展。