I am currently trying to use RInside
to do some plots in backtesting, inspired by Saving Lattice Plots with RInside and Rcpp. I came with problem by compiling RInside
. And before digging into my question, I've already looked up the three previous questions:
Yet it wouldn't solve mine. Following standard steps, I install the latest RInside
packages and I execute the following makefile Makefile.win
included in the downloaded RInside
binary:
## -*- mode: makefile; tab-width: 8; -*-
##
## Simple Makefile for Windows
##
## Note that the libRInside library encodes the value of R_HOME found
## at compilation. So if you use the CRAN package of RInside, its value
## may not correspond to where you have R installed. One quick fix is
## export the appropriate value of R_HOME, eg ony my work machine
## set R_HOME=C:\opt\R-current
## The other is to re-install RInside from source on your machine.
## Either one should allow you to actually run the binaries created
## with this Makefile
## This version is fairly directly derived from the Unix versions
## You may have to set R_HOME manually if this does not work
## It requires Rtools in the path -- as does all R package building
#R_HOME := $(shell R RHOME | sed -e "s|\\\\|\/|g")
R_HOME := "C:/R/R-3.1.3"
## You may have to set this to one of the two values below to enforce a particular
## architecture in case the autodetection in the next line does not work correctly
##R_ARCH := --arch $(shell echo 'cat(.Platform$$r_arch)' | R --vanilla --slave)
##R_ARCH := --arch i386
R_ARCH := --arch x64
## You may need to set R_LIBS_USER if Rcpp or RInside are installed where R does not see them by default
R_LIBS_USER := "C:/R/R-3.1.3/library"
sources := $(wildcard *.cpp)
programs := $(sources:.cpp=)
## include headers and libraries for R
RCPPFLAGS := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config --cppflags)
RLDFLAGS := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config --ldflags)
RBLAS := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config BLAS_LIBS)
RLAPACK := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config LAPACK_LIBS)
## include headers and libraries for Rcpp interface classes
RCPPINCL := $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)
RCPPLIBS := $(shell echo 'Rcpp:::LdFlags()' | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)
## include headers and libraries for RInside embedding classes
RINSIDEINCL := $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)
RINSIDELIBS := $(shell echo 'RInside:::LdFlags()' | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)
## compiler etc settings used in default make rules
CXX := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CXX)
CPPFLAGS := -Wall $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CPPFLAGS)
CXXFLAGS := $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CXXFLAGS)
LDFLAGS = -s
LDLIBS := $(RLDFLAGS) $(RBLAS) $(RLAPACK) $(RINSIDELIBS) $(RCPPLIBS)
CC := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CXX)
all : $(programs)
clean:
rm -vf $(programs)
checkR:
echo "R is at $(R_HOME)"
The change that I made in Makefile.win to make it executable R_HOME := "C:/R/R-3.1.3"
, R_LIBS_USER := "C:/R/R-3.1.3/library"
, R_ARCH := --arch x64
, and follow Problem with compiling RInside examples under Windows's idea I changed the RProfile.site
as:
# Things you might want to change
# options(papersize="a4")
# options(editor="notepad")
# options(pager="internal")
# set the default help type
# options(help_type="text")
options(help_type="html")
# set a site library
.Library.site <- file.path("C:/R/R-3.1.3/library")
# set a CRAN mirror
# local({r <- getOption("repos")
# r["CRAN"] <- "http://my.local.cran"
# options(repos=r)})
# Give a fortune cookie, but only to interactive sessions
# (This would need the fortunes package to be installed.)
# if (interactive())
# fortunes::fortune()
Run make -f Marfile.win
, I copy the cmd as :
c:\R\R-3.1.3\library\RInside\examples\standard>make -f Makefile.win
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_callbacks0.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/
bin/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/l
ib/x64/libRInside.a" -o rinside_callbacks0
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_callbacks1.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/
bin/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/l
ib/x64/libRInside.a" -o rinside_callbacks1
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_module_sample0.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.
1.3/bin/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInsi
de/lib/x64/libRInside.a" -o rinside_module_sample0
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample0.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample0
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample1.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample1
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample10.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample10
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample11.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample11
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample12.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample12
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample13.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample13
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample14.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample14
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample15.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample15
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample16.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample16
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample17.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bi
n/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib
/x64/libRInside.a" -o rinside_sample17
C:/R/R-3.1.3/library/Rcpp/include/Rcpp/protection/Armor.h:38:23: warning: inline
function 'Rcpp::Armor<T>& Rcpp::Armor<T>::operator=(const U&) [with U = SEXPREC
*, T = SEXPREC*, Rcpp::Armor<T> = Rcpp::Armor<SEXPREC*>]' used but never defined
[enabled by default]
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample2.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample2
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample3.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample3
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample4.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample4
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample5.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample5
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample6.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample6
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample7.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample7
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample8.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample8
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_sample9.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin
/x64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/
x64/libRInside.a" -o rinside_sample9
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_test0.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin/x
64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/x6
4/libRInside.a" -o rinside_test0
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_test1.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin/x
64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/x6
4/libRInside.a" -o rinside_test1
g++ -m64 -IC:/R/R-3.1.3/include -IC:/R/R-3.1.3/include/x64 -IC:/R/R-3.1.3/librar
y/Rcpp/include -IC:/R/R-3.1.3/library/RInside/include -O2 -Wall -mtune=core2 -Wa
ll -s rinside_test2.cpp -LC:/R/R-3.1.3/bin/x64 -lR -lm -LC:/R/R-3.1.3/bin/x
64 -lRblas -LC:/R/R-3.1.3/bin/x64 -lRlapack "C:/R/R-3.1.3/library/RInside/lib/x6
4/libRInside.a" -o rinside_test2
But when I try one of the examples, say :
#include <RInside.h> // for the embedded R via RInside
int main(int argc, char *argv[]) {
RInside R(argc, argv); // create an embedded R instance
R["txt"] = "Hello, world!\n"; // assign a char* (string) to 'txt'
R.parseEvalQ("cat(txt)"); // eval the init string, ignoring any returns
exit(0);
}
it gives the following error:
# Rcpp::sourceCpp('C:/R/R-3.1.3/library/RInside/examples/standard/rinside_sample0.cpp')
g++ -m64 -I"C:/R/R-31~1.3/include" -DNDEBUG -I"C:/R/R-3.1.3/library/Rcpp/include" -I"C:/R/R-3.1.3/library/RInside/examples/standard" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c rinside_sample0.cpp -o rinside_sample0.o
rinside_sample0.cpp:10:74: fatal error: RInside.h: No such file or directory
compilation terminated.
make: *** [rinside_sample0.o] Error 1
Warning message:
running command 'make -f "C:/R/R-31~1.3/etc/x64/Makeconf" -f "C:/R/R-31~1.3/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_78644.dll" WIN=64 TCLBIN=64 OBJECTS="rinside_sample0.o"' had status 2
Error in Rcpp::sourceCpp("C:/R/R-3.1.3/library/RInside/examples/standard/rinside_sample0.cpp") :
Error 1 occurred building shared library.
I thought it could be missing some depends, so I add // [[Rcpp::depends(RInside)]]
, which doesn't help either, error is listed as follows:
# Rcpp::sourceCpp('C:/R/R-3.1.3/library/RInside/examples/standard/rinside_sample0.cpp')
g++ -m64 -I"C:/R/R-31~1.3/include" -DNDEBUG -I"C:/R/R-3.1.3/library/Rcpp/include" -I"C:/R/R-3.1.3/library/RInside/include" -I"C:/R/R-3.1.3/library/RInside/examples/standard" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c rinside_sample0.cpp -o rinside_sample0.o
g++ -m64 -shared -s -static-libgcc -o sourceCpp_73309.dll tmp.def rinside_sample0.o -Ld:/RCompile/CRANpkg/extralibs64/local/lib/x64 -Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/R/R-31~1.3/bin/x64 -lR
rinside_sample0.o:rinside_sample0.cpp:(.text.startup+0x9b): undefined reference to `RInside::RInside(int, char const* const*, bool, bool, bool)'
rinside_sample0.o:rinside_sample0.cpp:(.text.startup+0xe4): undefined reference to `RInside::operator[](std::string const&)'
rinside_sample0.o:rinside_sample0.cpp:(.text.startup+0x16b): undefined reference to `RInside::parseEvalQ(std::string const&)'
rinside_sample0.o:rinside_sample0.cpp:(.text.startup+0x1cc): undefined reference to `RInside::~RInside()'
collect2: ld returned 1 exit status
Error in Rcpp::sourceCpp("C:/R/R-3.1.3/library/RInside/examples/standard/rinside_sample0.cpp") :
Error occurred building shared library.
Hope somebody has some valuable insight to share! Thanks
The error is very clear: RInside.h: No such file or directory
You need to figure why the -I....
instruction for the RInside
header directory does not come through, or whether that directory vanished, or ...
These build instructions are a few years old and reasonably well tested: they generally work.