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 ] ? 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 _______________________________________________ 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