如果我这样做:
Rcpp::Rcpp.package.skeleton("test1", module = TRUE)
Rcpp::Rcpp.package.skeleton("test2")
然后在test1
包src
目录中,我仅保留两个文件:
// 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();
}
test2
在test1
和Depends:
下的说明中都有LinkingTo:
。我还已经将test1
的{{1}}复制到rcpp_module.h
目录。但是在尝试使用inst/include
时收到一个未定义的符号:
test2
我在做什么错?