[Rcpp-devel] sourceCpp failing on windows whereas devtools::has_devel and devtools:::R works
romain at r-enthusiasts.com
romain at r-enthusiasts.com
Thu Oct 17 09:04:20 CEST 2013
Hello,
On a windows machine where Rtools is installed and works, i.e. I get:
> require(devtools)
> has_devel()
"C:/R/R-3.0.2/bin/i386/R" --vanilla CMD SHLIB foo.c
gcc -m32 -I"C:/R/R-30~1.2/include" -DNDEBUG
-I"C:/R/R-3.0.2/library/Rcpp/include"
-I"d:/RCompile/CRANpkg/extralibs64/local/include" -O3 -Wall
-std=gnu99 -mtune=core2 -c foo.c -o foo.o
gcc -m32 -shared -s -static-libgcc -o foo.dll tmp.def foo.o
C:/R/R-3.0.2/library/Rcpp/lib/i386/libRcpp.a
-Ld:/RCompile/CRANpkg/extralibs64/local/lib/i386
-Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/R/R-30~1.2/bin/i386 -lR
[1] TRUE
sourceCpp does not manage to find the tools correctly:
> evalCpp( "1+1")
Error in sourceCpp(code = code, env = env, rebuild = rebuild,
showOutput = showOutput, :
Error 1 occurred building shared library.
WARNING: The tools required to build C++ code for R were not found.
Please download and install the appropriate version of Rtools:
http://cran.r-project.org/bin/windows/Rtools/
Using devtools:::R however, I manage to compile the file correctly:
> code <- '#include <Rcpp.h>
+ using namespace Rcpp;
+
+ // [[Rcpp::export]]
+ double foo(){
+ return 2;
+ }
+ '
> Sys.setenv( "PKG_CXXFLAGS" = Rcpp:::RcppCxxFlags() )
> Sys.setenv( "PKG_LIBS" = Rcpp:::RcppLdFlags() )
>
> writeLines( code, "test.cpp" )
> devtools:::R( "CMD SHLIB test.cpp", getwd() )
"C:/R/R-3.0.2/bin/i386/R" --vanilla CMD SHLIB test.cpp
g++ -m32 -I"C:/R/R-30~1.2/include" -DNDEBUG
-I"d:/RCompile/CRANpkg/extralibs64/local/include"
-IC:/R/R-3.0.2/library/Rcpp/include -O2 -Wall -mtune=core2 -c
test.cpp -o test.o
g++ -m32 -shared -s -static-libgcc -o test.dll tmp.def test.o
C:/R/R-3.0.2/library/Rcpp/lib/i386/libRcpp.a
-Ld:/RCompile/CRANpkg/extralibs64/local/lib/i386
-Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/R/R-30~1.2/bin/i386 -lR
So perhaps we can borrow some wisdom out of devtools to make sourceCpp
work. As one can expect, the code from sourceCpp that fails is these
lines:
cmd <- paste(R.home(component = "bin"), .Platform$file.sep,
"R ", "CMD SHLIB ", "-o ", shQuote(context$dynlibFilename),
" ", ifelse(rebuild, "--preclean ", ""),
shQuote(context$cppSourceFilename),
sep = "")
Romain
> version
_
platform i386-w64-mingw32
arch i386
os mingw32
system i386, mingw32
status
major 3
minor 0.2
year 2013
month 09
day 25
svn rev 63987
language R
version.string R version 3.0.2 (2013-09-25)
nickname Frisbee Sailing
> packageDescription("Rcpp")$Version
[1] "0.10.5"
More information about the Rcpp-devel
mailing list