c++ - 了解 Rcpp 插件

标签 c++ r dependencies rcpp

我正在查看 3.6 of the Rcpp-FAQ 中提供的演示,并且我正在尝试了解如何创建此插件。提供的独立示例是

gslrng <-
'int seed = Rcpp::as<int>(par) ;
gsl_rng_env_setup();
gsl_rng *r = gsl_rng_alloc (gsl_rng_default);
gsl_rng_set (r, (unsigned long) seed);
double v = gsl_rng_get (r);
gsl_rng_free(r);return Rcpp::wrap(v);'

plug <- Rcpp:::Rcpp.plugin.maker(
  include.before = "#include <gsl/gsl_rng.h>",
  libs = paste("-L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp",
               "-Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib",
               "-L/usr/lib -lgsl -lgslcblas -lm"))
registerPlugin("gslDemo", plug )
fun <- cxxfunction(signature(par="numeric"), gslrng, plugin="gslDemo")
fun(0)

具体来说,为什么对 paste() 的调用是这样用逗号分隔的?是否应该通过插件处理所有 依赖项(头文件目录、链接器目录和库文件的名称)?

最佳答案

paste() 是基础 R 的 paste() 的普通用法——它创建一个单个 字符串,其中包含所有 链接指令被传递给 libs

对于 include.before 我们不需要它,因为只传递了一个 header 。

我建议您研究代码及其使用以及定义为hereRcppGSL 的实际插件并查看它们如何在诸如 e.g. RcppZiggurat 之类的包中使用。我所说的使用是指在客户端包编译和链接时查看说明扩展到什么。

它看起来非常复杂,但嘿,它已经工作了大约十年:)

关于c++ - 了解 Rcpp 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878616/

相关文章:

c++ - 在 C++ 中读取文件标签/属性

java - 将 Java 类实例绑定(bind)到 C++ 类实例

r - 如何从我的包内加载另一个包的数据

r - 根据对象名称的字符向量创建列表

dependencies - RLMLinkingObjects 循环依赖

winforms - 提交 Subversion 后为 "Unable to update dependencies of the project"

c++ - 如何为我的图形提供 vertex_index 属性

c++ - Bison :轮类减少冲突

r - 如何查看R中的最近邻居?

java - Netbeans Maven无法执行项目目标