gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:21:48 27 4
gpt4 key购买 nike

我遵循了迄今为止在本网站或德克、哈德利或其他人发表的笔记中解释的所有程序。但是,由于有关 cpp11 插件的问题,我在构建包时仍然遇到问题。

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

    #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 因为我使用 MAC,所以我添加了这一行:CXX=clang++ -std=c++11 到该文件。然而,当我这样做时,这 3 个错误消失了,但由于所有 Armadillo 变量类型(例如 mat、uvec 等)不再被识别,因此生成了 50 个新错误。所以我不知道如何解决这个问题。

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

最佳答案

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

包使用 LinkingTo: 执行此操作,对于 C++11 指令,要么 src/Makevars 要么 系统要求。参见 Writing R Extensions这记录了这一点。

关于rcpp - 构建使用 RcppArmadillo、RcppEigen 并依赖于 Cpp11 插件的 R 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42109491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com