在Windows上使用Rcpp创建.dll文件和编译C ++代码

时间:2015-01-08 15:39:01

标签: c++ r windows powershell rcpp

我正在努力让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
    

1 个答案:

答案 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中做到了这一点。