如何让Rcpp找到一个新模块?

Mil*_*ilo 5 c++ rcpp

在我成功编译了一个新的Rcpp模块之后("使用Rcpp模块公开C++函数和类,Dirk Eddelbuettel Romain Francois"中的示例)

按照论文中的说明,

require( Rcpp )
yada <- Module( "yada" )
Run Code Online (Sandbox Code Playgroud)

R抱怨错误:

Error in FUN("_rcpp_module_boot_yada"[[1L]], ...) : 
    no such symbol _rcpp_module_boot_yada in package .GlobalEnv
Run Code Online (Sandbox Code Playgroud)

我在调用''Module("yada")''之前尝试将''dyn.load("/ path/to/yada.dll")''放入,仍然是同样的错误.

关于Rcpp模块的在线信息非常少.有没有人知道如何解决这个问题?我应该将编译后的模块dll放在某个特定的文件夹中吗?

示例代码:

const char* hello( std::string who ){
  std::string result( "hello " ) ;
  result += who ;
  return result.c_str() ;
}

RCPP_MODULE(yada){
  using namespace Rcpp ;
  function( "hello", &hello ) ;
}
Run Code Online (Sandbox Code Playgroud)

小智 2

要从外部库(“yada.dll”)加载模块,您必须向 Module() 函数提供 PACKAGE 参数:

yada <- Module( "yada", PACKAGE = "yada" )
Run Code Online (Sandbox Code Playgroud)

完整的例子如下(在Linux下测试过,我猜它在Windows下的工作原理类似):

C++:

#include <Rcpp.h>

const char* hello( std::string who ){
  std::string result( "hello " ) ;
  result += who ;
  return result.c_str() ;
}

RCPP_MODULE(yada){
  using namespace Rcpp ;
  function( "hello", &hello ) ;
}
Run Code Online (Sandbox Code Playgroud)

回复:

require( Rcpp )
dyn.load( "yada.so" )
yada <- Module( "yada", PACKAGE = "yada" )
yada$hello( "world" )
Run Code Online (Sandbox Code Playgroud)