On 7 September 2012 at 06:40, Dirk Eddelbuettel wrote: | | On 6 September 2012 at 23:51, Jiqiang Guo wrote: | | | | | | On Thu, Sep 6, 2012 at 11:43 PM, Dirk Eddelbuettel <e...@debian.org> wrote: | | | | | | On 6 September 2012 at 21:24, Jiqiang Guo wrote: | | | Dear List, | | | | | | In the middle of figure out another problem, I used function Module | | twice, but | | | then I got segfault. Is there any solution for this? For the time | | being, I | | | really need to call function Module more than once. | | | | a) I simply never combine Rcpp modules with inline. With a package, things | | work. | | | | | | b) In | | | | m <- Module("foo1", getDynLib(fx)) | | m2 <- Module("foo1", getDynLib(fx)) | | | | are you by chance mistaking Module() [ ie the declaration ] with new() | | [ | | ie the instantiation of an object ] ? | | | | No. I am just trying to narrow down what causes the real problem I have. And I | | think now it is because I called Module a second time. Following Module call, I | | do have new .... | | | | Anyway, the above a) and b) do not explain and solve the problem I have. | | Use new() twice to create not two objects.
Sorry, typed too fast: remove the 'not'. If I understand what you want (which is not clear as you haven't really stated WHY you want to call Module twice, which you simply should not): use new() twice. Dirk | | Dirk | | | Thanks, | | | | Jiqiang | | | | | | | | | | | | Dirk | | | | | | | Best, | | | Jiqiang | | | | | | P.S. an example code and the dump of output. | | | In addition, my sessionInfo() | | | | | | > sessionInfo() | | | R version 2.15.1 (2012-06-22) | | | Platform: x86_64-pc-linux-gnu (64-bit) | | | | | | locale: | | | [1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C | | | [3] LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8 | | | [5] LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8 | | | [7] LC_PAPER=C LC_NAME=C | | | [9] LC_ADDRESS=C LC_TELEPHONE=C | | | [11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C | | | | | | attached base packages: | | | [1] stats graphics grDevices utils datasets methods | | base | | | | | | | | | other attached packages: | | | [1] inline_0.3.8 Rcpp_0.9.13 | | | | | | loaded via a namespace (and not attached): | | | [1] tools_2.15.1 | | | | | | | | | require("Rcpp") | | | require("inline") | | | | | | inc <- ' | | | class Foo { | | | private: | | | int x_; | | | public: | | | Foo(int x) : x_(x) { } | | | void setx(int x) { x_ = x;} | | | int getx() const { return x_;} | | | }; | | | | | | RCPP_MODULE(foo1) { | | | class_<Foo>("Foo") | | | .constructor<int>() | | | .method("setx", &Foo::setx) | | | .method("getx", &Foo::getx) | | | ; | | | } | | | ' | | | fx <- cxxfunction(signature(), "", include = inc, plugin = "Rcpp", | | verbose = ! | | | TRUE) | | | m <- Module("foo1", getDynLib(fx)) | | | m2 <- Module("foo1", getDynLib(fx)) | | | | | | ====== | | | | | | > m <- Module("foo1", getDynLib(fx)) | | | > m2 <- Module("foo1", getDynLib(fx)) | | | > | | | > f <- new(m$Foo, 1) | | | > f2 <- new(m2$Foo, 1) | | | | | | *** caught segfault *** | | | address 0x90, cause 'memory not mapped' | | | | | | Traceback: | | | 1: .Call(symbol) | | | 2: Module(module, mustStart = TRUE) | | | 3: .getModulePointer(x) | | | 4: m2$Foo | | | 5: .getClassFromCache(Class, where) | | | 6: getClass(Class, where = topenv(parent.frame())) | | | 7: new(m2$Foo, 1) | | | aborting ... | | | | | | | | | | | | ---------------------------------------------------------------------- | | | _______________________________________________ | | | Rcpp-devel mailing list | | | Rcpp-devel@lists.r-forge.r-project.org | | | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel | | -- | | Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com | | | | | | -- | Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com -- Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel