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

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


Based on this, I've added Rcpp:::SHLIB and RcppArmadillo:::SHLIB, so 
that with the next versions of these packages, you can do:

$ Rscript -e "RcppArmadillo:::SHLIB('bla.cpp')"

Romain

Le 12/12/10 13:15, Romain Francois a écrit :
> 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):
>
> require(RcppArmadillo)
>
> PKG_LIBS <- sprintf( "%s $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)",
> Rcpp:::RcppLdFlags() )
> PKG_CPPFLAGS <- sprintf( "%s %s", Rcpp:::RcppCxxFlags(),
> RcppArmadillo:::RcppArmadilloCxxFlags() )
>
> Sys.setenv(
> PKG_LIBS = PKG_LIBS ,
> PKG_CPPFLAGS = PKG_CPPFLAGS
> )
> 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/Library/Frameworks/R.framework/Resources/include/x86_64
> -I/Library/Frameworks/R.framework/Versions/2.12/Resources/library/Rcpp/include
> -I"/Library/Frameworks/R.framework/Versions/2.12/Resources/library/RcppArmadillo/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
> /Library/Frameworks/R.framework/Versions/2.12/Resources/library/Rcpp/lib/x86_64/libRcpp.a
> -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
>
>


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- 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