我遵循了到目前为止在这个网站上解释的所有程序,或者德克、哈德利或其他人发表的笔记。然而,由于与cpp11插件有关的问题,我在构建包时仍然存在问题。
我使用了RcppArmadillo.package.skeleton()函数。我将cpp文件放在src目录中。命名空间文件看起来像它应该包含的importFrom(Rcpp, sourceCpp)行。我还编辑了描述文件,并在LinkingTo部分中添加了RcppEigen和我使用的其他包。我终于在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)]]问题是,当我构建我的包,并得到错误和警告的行,我有auto类型,这涉及到cpp11插件。
在这个网站上搜索了类似的帖子后,我得出结论,我必须强迫我的R编译器使用c++11,因此我编辑了位于~/.R/Makevars的Makvars文件,并且由于我使用了CXX=clang++ -std=c++11,所以我在该文件中添加了一行:CXX=clang++ -std=c++11。但是,当我这样做时,这3个错误消失了,但是50个新的错误被生成,因为所有的Armadillo变量类型,如mat、uvec等等都不再被识别了。所以我不知道怎么解决这个问题。
我认为,基本上,使用// [[Rcpp::plugins(cpp11)]]应该处理它,因为新版本的Rcpp支持这个插件,这可能就是为什么当我在R中运行sourceCpp时,没有任何错误,而且一切看起来都很好。但我不知道制作包裹的时候会发生什么。我的Rcpp版本是0.12.8。预先感谢您的任何帮助。
发布于 2017-02-08 11:30:22
用于依赖项(即其他标题)和编译器选项的插件供sourceCpp()使用。
包可以使用LinkingTo:,对于C++11指令,也可以使用src/Makevars或SystemRequirements。请参阅写R扩展,哪个文档记录了这个。
https://stackoverflow.com/questions/42109491
复制相似问题