[Rcpp-devel] package .onLoad multiple modules

baptiste auguie baptiste.auguie at googlemail.com
Mon May 30 00:29:47 CEST 2011


Hi,

On 30 May 2011 04:28, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 29 May 2011 at 18:56, baptiste auguie wrote:
> | Dear list,
> |
> | [Disclaimer: I am not very familiar with Rcpp/C++, and probably
> | haven't followed all the relevant discussions on this list.]
> |
> | I'm trying to tidy up two packages on r-forge [*] before submitting
> | them to CRAN. In "cda/zzz.r", I have the following code,
> |
> | NAMESPACE <- environment()
> | cda <- new( "Module" )
> | cdatests <- new( "Module" )
> | cd <- new( "Module" )
> | linear <- new( "Module" )
> | array <- new( "Module" )
> |
> | .onLoad <- function(libname, pkgname){
> |   unlockBinding( "cda" , NAMESPACE )
> |   unlockBinding( "cdatests" , NAMESPACE )
> |   unlockBinding( "cd" , NAMESPACE )
> |   unlockBinding( "linear" , NAMESPACE )
> |   assign( "cda", Module( "cda" ), NAMESPACE )
> |   assign( "cdatests", Module( "cdatests" ), NAMESPACE )
> |   assign( "cd", Module( "cd" ), NAMESPACE )
> |   assign( "linear", Module( "linear" ), NAMESPACE )
> |   lockBinding( "cda", NAMESPACE )
> |   lockBinding( "cdatests", NAMESPACE )
> |   lockBinding( "cd", NAMESPACE )
> |   lockBinding( "linear", NAMESPACE )
> |
> |   unlockBinding( "array" , NAMESPACE )
> |   assign( "array", Module( "array" ), NAMESPACE )
> |   lockBinding( "array", NAMESPACE )
> |
> | }
> |
> | It seems to work, but is there something I can/should do to make this
> | a wee cleaner?
>
> Have another look at the Rcpp-modules vignette, and/or the third set of
> slides ("Advanced Rcpp") from our class in April -- you no longer need the
> unlockBinding / lockBinding business as Romain internalized that. The
> skeleton-generated packages now just do this in zzz.R:
>
>  .onLoad <- function(pkgname, libname){
>      loadRcppModules()
>  }
>
> using a 'RcppModules: cda, cdatests, cd, linear, array' declaration in
> DESCRIPTION.

Strange, this does not seem to work for me.

If I use the following zzz.r, (with RcppModules listed in DESCRIPTION)

.onLoad <- function(libname, pkgname){
   loadRcppModules()
}

I get a segfault whenever I use a c++ function,

 *** caught segfault ***
address 0x0, cause 'memory not mapped'

Traceback:
 1: .External(list(name = "InternalFunction_invoke", address =
<pointer: 0x101407f30>,     dll = list(name = "Rcpp", path =
"/Library/Frameworks/R.framework/Versions/2.13/Resources/library/Rcpp/libs/x86_64/Rcpp.so",
        dynamicLookup = TRUE, handle = <pointer: 0x101441030>,
info = <pointer: 0x1002b3ed0>), numParameters = -1L),     <pointer:
0x103011050>, ...)
 2: circular_dichroism_spectrum(clust, gold, n = 1.33, N = 36, progress = FALSE)
 3: onecluster()

Is there another step I'm missing?

Best regards,

baptiste

>
> The question Laurent raised the other day about spurious warnings from 'R CMD
> check' around this still stands though.  Not yet sure what to do there...
>
> Cheers, Dirk
>
> --
> Gauss once played himself in a zero-sum game and won $50.
>                      -- #11 at http://www.gaussfacts.com
>


More information about the Rcpp-devel mailing list