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

Reply via email to