【问题标题】:Rcpp: porting C++ function into R, 'Rcpp.h' file not foundRcpp:将 C++ 函数移植到 R 中,找不到“Rcpp.h”文件
【发布时间】:2016-11-21 23:49:10
【问题描述】:

我有一些 C++ 代码。我想用 Rcpp 把它变成一个 R 包。

这就是我正在做的事情:

  1. 通过执行Rcpp.package.skeleton("myPackageName")创建包框架
  2. 运行devtools::load_all() 以查看rcpp_hello_world()library(myPackageName) 之后是否有效。确实如此!
  3. 获取所有 C++ 源代码并将其复制到 /src。再次运行devtools::load_all() 后,我仍然可以使用rcpp_hello_world()
  4. 对于现在位于 /src 中的 C++ 源代码中的每个函数,只需执行以下操作:

(A) 放在.cpp文件的顶部`

 #include <Rcpp.h>
using namespace Rcpp;

(B) 在每个函数前面加上void这个评论

 //[[Rcpp::export]]

现在,我愚蠢地认为,如果我运行devtools::load_all(),则可以访问带有编译功能的代码和那些 C++ 函数。这是不正确的。

这是load_all()之后的错误:

 1 warning generated.
sourcecode1.cc:2:10: fatal error: 'Rcpp.h' file not found
#include <Rcpp.h>
         ^
1 error generated.
make: *** [myPackageName] Error 1
ERROR: compilation failed for package ‘myPackageName’

找不到头文件Rcpp.h

(1) 我上面的程序在使用 Rcpp 直接从 C++ 代码创建 R 包时是否不正确?这是我从书中收集到的内容

(2) 我该如何解决这个问题?

【问题讨论】:

    标签: c++ r rcpp


    【解决方案1】:

    您需要运行 RStudio 也会为您执行的“compileAttributes()”。

    总之每次修改或添加接口时,都需要运行这个函数。

    【讨论】:

    • @DirkEddelbuettel 感谢您的回复。 (1) 在包目录中,我运行了library(Rcpp)compileAttributes(pkgdir = ".", verbose = getOption("verbose"))devtools::load_all()。我得到与上面相同的错误。 2. 这在 RStudio 中会更容易吗?
    • 检查您是否已更新文件 RcppExports。结果是 R 和 RcppExports.cpp。下一次重建将反映它们。值得我自己不使用 devtools。
    • 如果它让你感到困惑,那就去他妈的devtools!执行 1)compileAttributes()(我有一个辅助脚本 compAttr.r 可以做到这一点),然后 2)运行 ./cleanup 以确保一切都将得到重建和 3)R CMD INSTALL . 它应该都可以工作。从第一天开始就使用工作流程,俗话说“它对我有用”。我认为devtools 中有更多的 Rcpp 助手,但我不是要问的人...
    • 我更像是一个CNTRL + SHIFT + B RStudio 的家伙。否则,我默认使用 Dirk 的方法(减去更小!)。不过,以下可能是在load_all() 之外使用devtools 的一种方式:1.compileAttributes()、2.build() 和3.install()。 (假设工作目录是包根目录。)
    • 我有时也使用 Ctrl-Shift-B。还需要(一次性)正确设置项目选项。包括在我的情况下关闭devtools ;-)
    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多