Поддерживают ли атрибуты Rcpp только библиотеки заголовков Rcpp Modules? - PullRequest
0 голосов
/ 20 марта 2019

Если я сделаю:

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

Затем в каталоге test1 package 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 rcpp_module.h в каталог inst/include.Все же я получаю неопределенный символ при попытке использовать test2:

Error in dyn.load(dllfile) : 
  unable to load shared object 'test2/src/test2.so':
  dlopen(test2/src/test2.so, 6): Symbol not found: __ZN5World5greetEv 

Что я делаю неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...