[Rcpp-devel] Compiling RcppArmadillo through R CMD SHLIB on Windows XP

Romain Francois romain at r-enthusiasts.com
Sun Dec 12 13:15:09 CET 2010

Le 12/12/10 04:03, Savitsky, Terrance a écrit :
> Hello,
> I employ a variant of the following lines in a cygwin bash session in
> Windows XP to compile my .cpp file.
> $ export PKG_LIBS=`Rscript.exe -e "RcppArmadillo:::LdFlags()"`
> $ export PKG_CXXFLAGS=`Rscript.exe -e "RcppArmadillo:::CxxFlags()"`
> $ R CMD SHLIB fastLm.cpp
> I receive the following compile error:
> G++ -I”C:/PROGRA~1/R/R-212~1.0/include” Rscript.exe –e
> ”RcppArmadillo:::CxxxFlags()” –O2 – Wall –pedantic – c fastLm.cpp – o
> fastLm.o
> G++:Rscript.exe: No such file or directory
> fastLm.cpp:1:27: error: RcppArmadillo.h: No such file or directory
> fastLm.cpp:2: error: ‘SEXP’ does not have name a type
> I’ve included the R bin directory containing Rscript.exe to the PATH
> environment statement. Should one use a different syntax for windows to
> capture RcppArmadillo dependencies? (Fyi, I am able to build using
> inline, though my code is 600 lines and I will have multiple versions,
> so using the old approach may provide the most modular de-bugging
> approach vs. re-installing a package as I add files).
> Thanks, Terrance Savitsky

Another way that is close to what you want to do (but still, please 
follow my previous advice) is to use R's abilities instead of windows:

Consider this simple bla.cpp file :

#include <RcppArmadillo.h>

using namespace Rcpp ;
extern "C" SEXP foo(){
     arma::mat x(2,2) ;
     NumericMatrix res = wrap( x + x ) ;
     return res ;

You could R CMD SHLIB it using this little R script (compile.R):


PKG_LIBS <- sprintf( "%s $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)", 
Rcpp:::RcppLdFlags() )
PKG_CPPFLAGS <- sprintf( "%s %s", Rcpp:::RcppCxxFlags(), 
RcppArmadillo:::RcppArmadilloCxxFlags() )

R <- file.path( R.home(component = "bin"), "R"  )
system( sprintf( "%s CMD SHLIB %s", R, paste( commandArgs(TRUE), 
collapse = " ") ) )

Then you do:

romain at naxos /tmp $ Rscript compile.R bla.cpp
Le chargement a nécessité le package : RcppArmadillo
Le chargement a nécessité le package : Rcpp
Le chargement a nécessité le package : methods
Le chargement a nécessité le package : inline
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include 
-I/usr/local/include    -fPIC  -g -O3 -Wall -pipe -c bla.cpp -o bla.o
g++ -arch x86_64 -dynamiclib -Wl,-headerpad_max_install_names -undefined 
dynamic_lookup -single_module -multiply_defined suppress 
-L/usr/local/lib -o bla.so bla.o 
-L/Library/Frameworks/R.framework/Resources/lib/x86_64 -lRlapack 
-L/Library/Frameworks/R.framework/Resources/lib/x86_64 -lRblas 
-lgfortran -F/Library/Frameworks/R.framework/.. -framework R 
-Wl,-framework -Wl,CoreFoundation


Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
|- http://bit.ly/fT2rZM : highlight 0.2-5
|- http://bit.ly/gpCSpH : Evolution of Rcpp code size
`- http://bit.ly/hovakS : RcppGSL initial release

More information about the Rcpp-devel mailing list