Le 2013-08-24 02:47, Dirk Eddelbuettel a écrit :
Hi,

On 23 August 2013 at 19:33, Subodh Acharya wrote:
|  I am a beginner in Rcpp and I am very much enjoying the amazing Rcpp and
| RcppArmadillo. It has really boosted my speed.
| I am making an R package that links to the RcppArmadillo to call
its new sample
| () function. I have several different functions ( defined in separate .cpp
| files) that call the RcppArmadillo::sample(). 
|  But whenever I call sample() in more than 1 file, I get the error during
| package compilation. However, if I use the RcppArmadillo: sample()
in only one
| place and use R's sample() function, the package is compiled fine. 
| Obviously, there is a multiple definition problem (from the message) but I
| could not solve it. Any help will be highly appreciated. 

That may be a problem at our end in the design of the contributed sample.h file. Someone recently noticed the same issue with sparse matrix conversion I had added in a similar fashsion; Romain has since cleaned this up and moved
it into RcppArmadillo proper.

For now, your best (only?) bet may be to organize your code in such a way
that sample.h gets included only once.

Sorry, Dirk

This is now fixed in svn.
The file did not have include guards and it was defining functions that were too long to be inlined.

Since I don't want the user to have to link against an RcppArmadillo library (like we do in Rcpp), I made these functions (SampleReplace, etc ...) templates.
This should allow people to include this file more than once.

The alternative would be to only have declarations of the SampleReplace, etc ... functions in sample.h and definitions in a .cpp file in RcppArmadillo, but then we would need users to mess with their PKG_LIBS, and we would need to store a library we can link against. This is already a lot of trouble to do this with Rcpp, so I'm not doing that for RcppArmadillo.

The other alternative is to not host sample in RcppArmadillo but in another package. I don't have strong opinion on this, but sample is somewhat of an outlier in RcppArmadillo. RcppArmadillo is just supposed to make armadillo available. sample is an example use case.

Romain

_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to