Rcpp属性是否支持非仅标题的Rcpp模块库?

时间:2019-03-20 17:48:34

标签: rcpp

如果我这样做:

Rcpp::Rcpp.package.skeleton("test1", module = TRUE)
Rcpp::Rcpp.package.skeleton("test2")

然后在test1src目录中,我仅保留两个文件:

// rcpp_module.cpp
#include <Rcpp.h>
#include "rcpp_module.h"

std::string World::greet(){ return msg;  }

RCPP_MODULE(yada){
    using namespace Rcpp ;
    class_<World>("World")
    .constructor() // expose the default constructor
    .method("greet", &World::greet , "get the message")
    .method("set", &World::set     , "set the message")
    ;
}

// rcpp_module.h
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::plugins(cpp11)]]

class World {
public:
  World() : msg("hello") {}
  void set(std::string msg) { this->msg = msg; }
  std::string greet(); // NOTE this is just the declaration
private:
  std::string msg;
};

加上一个loadModule通话:

# zzz.R
loadModule("yada", TRUE)

然后,在test2软件包src中,我只有一个文件:

// rcpp_hello_world.cpp
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::depends(test1)]]
#include "rcpp_module.h"

// [[Rcpp::export]]
List rcpp_hello_world2(SEXP xptr) {
  Rcpp::XPtr<World> world_ptr(xptr);
  Rcout << world_ptr->greet() << std::endl;
  return List::create();
}

test2test1Depends:下的说明中都有LinkingTo:。我还已经将test1的{​​{1}}复制到rcpp_module.h目录。但是在尝试使用inst/include时收到一个未定义的符号:

test2

我在做什么错?

0 个答案:

没有答案