在 Windows 下编译 RInside 示例时出错
Error with compiling RInside examples under Windows
我目前正在尝试使用 RInside
在回测中做一些绘图,受到 Saving Lattice Plots with RInside and Rcpp 的启发。我通过编译 RInside
遇到了问题。在深入探讨我的问题之前,我已经查看了前三个问题:
Problem with compiling RInside examples under Windows;
Building (and running) RInside examples under windows;
Compiling RInside programs on Windows.
但它无法解决我的问题。按照标准步骤,我安装了最新的 RInside
软件包,并执行了包含在下载的 RInside
二进制文件中的以下 makefile Makefile.win
:
## -*- 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)"
我在 Makefile.win 中所做的更改使其可执行 R_HOME := "C:/R/R-3.1.3"
、R_LIBS_USER := "C:/R/R-3.1.3/library"
、R_ARCH := --arch x64
,并按照 Problem with compiling RInside examples under Windows 的想法进行了更改RProfile.site
为:
# 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()
运行 make -f Marfile.win
,我把cmd复制为:
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
但是当我尝试其中一个例子时,说:
#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);
}
它给出了以下错误:
# 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.
我觉得可能是少了一些depends,所以加了// [[Rcpp::depends(RInside)]]
,也没用,报错如下:
# 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.
希望有人能分享一些有价值的见解!谢谢
错误很明显:RInside.h: No such file or directory
您需要弄清楚为什么 RInside
头目录的 -I....
指令没有通过,或者该目录是否消失了,或者...
这些构建说明已有数年历史,并且经过了相当充分的测试:它们通常有效。
我目前正在尝试使用 RInside
在回测中做一些绘图,受到 Saving Lattice Plots with RInside and Rcpp 的启发。我通过编译 RInside
遇到了问题。在深入探讨我的问题之前,我已经查看了前三个问题:
Problem with compiling RInside examples under Windows;
Building (and running) RInside examples under windows;
Compiling RInside programs on Windows.
但它无法解决我的问题。按照标准步骤,我安装了最新的 RInside
软件包,并执行了包含在下载的 RInside
二进制文件中的以下 makefile Makefile.win
:
## -*- 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)"
我在 Makefile.win 中所做的更改使其可执行 R_HOME := "C:/R/R-3.1.3"
、R_LIBS_USER := "C:/R/R-3.1.3/library"
、R_ARCH := --arch x64
,并按照 Problem with compiling RInside examples under Windows 的想法进行了更改RProfile.site
为:
# 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()
运行 make -f Marfile.win
,我把cmd复制为:
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
但是当我尝试其中一个例子时,说:
#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);
}
它给出了以下错误:
# 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.
我觉得可能是少了一些depends,所以加了// [[Rcpp::depends(RInside)]]
,也没用,报错如下:
# 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.
希望有人能分享一些有价值的见解!谢谢
错误很明显:RInside.h: No such file or directory
您需要弄清楚为什么 RInside
头目录的 -I....
指令没有通过,或者该目录是否消失了,或者...
这些构建说明已有数年历史,并且经过了相当充分的测试:它们通常有效。