user3202835
user3202835

Reputation:

Rcpp Rcpp.package.skeleton("mypackage") "rcpp_hello_world" not available for .Call() for package "mypackage"

I've managed to get the Rcpp.package.skeleton to INSTALL in Windows by the following commands at the R prompt -

Rcpp.package.skeleton("mypackage")
system("R CMD build mypackage")
system("R CMD INSTALL mypackage")
library(mypackage)

This creates the mypackage.dll. However when I do the following commands -

rcpp_hello_world <- function(){ .Call( "rcpp_hello_world", PACKAGE = "mypackage")}
rcpp_hello_world()

I get the following error:

Error in .Call("rcpp_hello_world", PACKAGE = "mypackage") : 
"rcpp_hello_world" not available for .Call() for package "mypackage"

I run sessionInfo() and I get the following:

attached base packages:
[1] tools     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] mypackage_1.0 inline_0.3.13 Rcpp_0.11.1

Stating that my new mypackage is there.

Are there any further checks I can do to see what is happening? Any ideas?

Upvotes: 20

Views: 6383

Answers (3)

Martin Smith
Martin Smith

Reputation: 4087

If the package NAMESPACE file contains the line useDynLib(mypackage, .registration = TRUE) (perhaps via a roxygen line #' @useDynLib, .registration = TRUE), then it is necessary to remove PACKAGE = "mypackage" from .C / .Call function calls:

i.e. .Call( "rcpp_hello_world", PACKAGE = "mypackage") becomes .Call("rccp_hello_world").

Upvotes: 0

Joe Cheng
Joe Cheng

Reputation: 8061

FWIW, I just got a similar error while retrofitting an existing R-only package with Rcpp, and the problem was a missing useDynLib(mypackage) in NAMESPACE.

Upvotes: 38

Dirk is no longer here
Dirk is no longer here

Reputation: 368509

The package is tested extensively before every release, including on the Windows-using Win-builder. The regression tests even include building a package this way via a call to package.skeleton().

It is also rebuilt by CRAN post-release. Many people use it.

For all of those people, tests are appropriate and when long long cannot be used, it is #define-d away.

Now, you insist on building in a non-standard way: no source I know of recommends calling R CMD INSTALL via system(). I suspect you simply have a $PATH mishap and find another wrong g++ version.

I would suggest to do what the documentation suggests and run

  R CMD INSTALL mypackage*tar.gz

in a cmd.exe prompt.

Upvotes: 2

Related Questions