我正在查看3.6 Rcpp-常见问题提供的演示,并试图了解这个插件是如何创建的。提供的独立示例如下
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()的调用是以逗号分隔的?是否应该通过处理所有依赖项(头文件目录、链接器目录和库文件名)?
发布于 2019-07-04 00:16:23
paste()是基R的paste()的一种普通用法--它创建一个包含传递给libs的所有链接指令的字符串。
对于include.before,我们不需要这样做,因为只有一个标头被传递。
我建议您研究代码及其使用,以及RcppGSL的实际插件,即定义为这里的插件,并了解它们如何在包(如RcppZiggurat )中使用。我的意思是,当客户端包编译和链接时,我的意思是看到指令扩展到什么程度。
它看起来非常复杂,但是它已经工作了大约十年了:)
https://stackoverflow.com/questions/56878616
复制相似问题