我正在努力让Rcpp在我的Windows上工作。我下载了Rtools,我已经改变了路径
c:\ Rtools \ bin; c:\ Rtools \ gcc-4.6.3 \ bin; c:\ Program Files \ R \ R-3.0.2 \ bin \ x64; [others]
然后我采用了一个非常简单的c ++文件(new.cpp),就像这样
include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int timesTwo(int x) {
return x * 2;
}
然后我按照无缝R和C ++的说法继续使用Powershell 与D. Eddelbuettel的Rcpp集成(第2章)我尝试编译代码
PS C:\Users\RXD308\pgmcpp> PKG_CXXFLAGS='Rscript -e 'Rcpp:::CxxFlags()''\ PKG_LIBS='Rscript -e 'Rcpp:::LdFlags()''\ RCMD SHLIB new.cpp
获取错误
An expression was expected after '('.
At line:1 char:43
+ PKG_CXXFLAGS='Rscript -e 'Rcpp:::CxxFlags( <<<< )''\ PKG_LIBS='Rscript -e 'Rcpp:::LdFlags()''\ RCMD SHLIB new.cpp
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
最后两件事
我有MinGW并在我的电脑上工作(g ++ 4.6)
我认为我在powershell中遇到了R命令的一个主要问题。事实上,当我访问powershell时,我输入&#34; R --version&#34;我得到了这个错误
Invoke-History : Cannot locate history for commandline --version.
At line:1 char:2
+ R <<<< --version
+ CategoryInfo : ObjectNotFound: (--version:String) [Invoke-History], ArgumentException
+ FullyQualifiedErrorId : InvokeHistoryNoHistoryForCommandline,Microsoft.PowerShell.Commands.InvokeHistoryCommand
答案 0 :(得分:2)
这是一个shell错误:
PKG_CXXFLAGS='Rscript -e 'Rcpp:::CxxFlags()''
PKG_LIBS='Rscript -e 'Rcpp:::LdFlags()''
RCMD SHLIB new.cpp
因为您在单个刻度内有单个刻度。请仔细阅读第24页,看看面向后的刻度和前向刻度之间的区别。向后意味着执行。
完成此操作后,您可以通过在R会话中执行Rcpp::LdFlags()
之类的操作来避免这些第二级间接,并将生成的字符串复制到Makevars中。
这将帮助您编译代码,这是第一个业务顺序。
为了创建可分发的Makevars,您可以更仔细地查看已发布的解决方案。
编辑:确保在跑步前可以走路。从这样的事情开始
C:\>R CMD config CXXFLAGS
-O2 -Wall -mtune=core2
C:\>
然后转向Rscript
调用Rcpp函数,如图所示。也许你有PowerShell问题;我刚刚在cmd.exe
中做到了这一点。