On 13.05.2011, at 18:55, Dirk Eddelbuettel wrote: > On 13 May 2011 at 16:11, soeren.vo...@uzh.ch wrote: > > | Following all recommendations, we have rewritten our class to use STL. > However, I have been trying around with various changes, but I can't get it > working with RCPP_MODULES. Also, the code snippets posted by Romain Francois > did not help since we cannot use inline, rather we need raw C++ code that can > be compiled using R CMD BUILD etc. Therefore, I kindly ask the experts here > for an example adaption to the source below. I guess you experts instantly > see what needs to be done next to make the code working. Could you please > give tips for the next step? > > Could you detail what you mean by "can't get it working"? Does it not > compile? If so, can you show how you tried to compile and the error you are > getting? > > I'd like to help, but there is not enough information in this post.
Hello Dirk Compilation with R CMD CHECK FOO fails with the following error in 00install.out: Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/Users/sovo/GUTS/FOO.Rcheck/FOO/libs/i386/FOO.so': dlopen(/Users/sovo/GUTS/FOO.Rcheck/FOO/libs/i386/FOO.so, 6): Symbol not found: __ZN3FOOC1Ev Referenced from: /Users/sovo/GUTS/FOO.Rcheck/FOO/libs/i386/FOO.so Expected in: flat namespace The (original) class and its functions compile fine with R CMD SHLIB. So we guess that this error has something to do with the Rcpp modules implementation. Currently, FOO_mod.cpp is embedded in a package "FOO" created with Rcpp.pack...("FOO", module=TRUE), DESCRIPTION and NAMESPACE were adjusted accordingly, all other C sources were removed. Recapture that the package compiled and installed with our previous FOO version, however, since we wanted to use pointers, rewriting was necessary. After that, even exposing a blank class (FOO without anything, except the constructor, but that again without parameters) fails with the error above. I guess that we still do not manage to expose the variables and the one method used in the class to R -- but we have no idea how to accomplish. If I know how to do it with one, say, int, one vector and the one method, perhaps I could understand how to do for the (many more) other variables in the complete class (indeed, FOO is only a reduced example). What we want to prevent is to completely write the C-code for R use only. The best solution would be to change only some lines of code or even write a simple wrapper for the header file containing the class (there in C++). However, we thought it would be helpful to get it working in the first place, and then reengineer the code back to a more modular source. Thank you for your help Sören > | /* FOO_mod.cpp */ > | #include <Rcpp.h> > | #include <vector> > | #include <valarray> > | using namespace std; > | > | // from FOO.h > | class FOO > | { > | double dtau; > | vector<double> D, ee, ff, S; > | > | public: > | int M; > | vector<double> C, t, s, par; > | vector<int> y; > | > | FOO(); > | ~FOO(); > | > | double do_bar(vector<double> z); > | }; > | > | // from FOO.cpp > | double FOO::do_bar(vector<double> z) > | { > | // whatever it does > | } > | > | RCPP_MODULE(mod_foo){ > | using namespace Rcpp ; > | class_<FOO>( "FOO" ) > | .constructor() > | .field( "M" , &FOO::M ) > | .field( "C" , &FOO::C ) > | .method( "do_bar", &FOO::do_bar ) > | ; > | } > | > > -- > Gauss once played himself in a zero-sum game and won $50. > -- #11 at http://www.gaussfacts.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