首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建使用RcppArmadillo、RcppEigen并依赖于Cpp11插件的R包

构建使用RcppArmadillo、RcppEigen并依赖于Cpp11插件的R包
EN

Stack Overflow用户
提问于 2017-02-08 09:40:29
回答 1查看 1K关注 0票数 3

我遵循了到目前为止在这个网站上解释的所有程序,或者德克、哈德利或其他人发表的笔记。然而,由于与cpp11插件有关的问题,我在构建包时仍然存在问题。

我使用了RcppArmadillo.package.skeleton()函数。我将cpp文件放在src目录中。命名空间文件看起来像它应该包含的importFrom(Rcpp, sourceCpp)行。我还编辑了描述文件,并在LinkingTo部分中添加了RcppEigen和我使用的其他包。我终于在R中运行了compileAttributes(verbose=TRUE)函数,一切看起来都很好。因此,我想我已经做了我应该做的一切。我还必须指出,当我使用sourceCpp()在R中编译我的代码时,它工作得很完美,而且编译时没有错误!为了更好地说明我的依赖项是什么,我将代码的第一个块放在这里:

代码语言:javascript
复制
    #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。预先感谢您的任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 11:30:22

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

包可以使用LinkingTo:,对于C++11指令,也可以使用src/MakevarsSystemRequirements。请参阅写R扩展,哪个文档记录了这个。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42109491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档