在Windows下编译RInside示例时出错

时间:2015-06-08 02:07:25

标签: c++ r rcpp rinside

我目前正在尝试使用RInside在回溯测试中做一些情节,灵感来自Saving Lattice Plots with RInside and Rcpp。我通过编译RInside来解决问题。在深入研究我的问题之前,我已经查过了前三个问题:

  1. Problem with compiling RInside examples under Windows;

  2. Building (and running) RInside examples under windows;

  3. Compiling RInside programs on Windows

  4. 但它不会解决我的问题。按照标准步骤,我安装最新的RInside包,并执行下载的Makefile.win二进制文件中包含的以下makefile RInside

    ## -*- 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的想法更改了{{1 as:

    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() ,我将cmd复制为:

    make -f Marfile.win

    但是当我尝试其中一个例子时,请说:

    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. ,这也没有帮助,错误列举如下:

    // [[Rcpp::depends(RInside)]]

    希望有人有一些宝贵的见解可以分享!感谢

1 个答案:

答案 0 :(得分:3)

错误非常明确:RInside.h: No such file or directory

您需要弄清楚为什么-I....标头目录的RInside指令无法通过,或者该目录是否消失,或者......

这些构建说明已有几年历史且经过合理的测试:它们通常可以正常工作。