簡體   English   中英

在Windows上使用Rcpp創建.dll文件並編譯C ++代碼

[英]Creating .dll files and compiling C++ code using Rcpp on Windows

我很難使Rcpp在Windows上正常工作。 我下載了Rtools,並且將路徑更改為

c:\\ Rtools \\ bin; c:\\ Rtools \\ gcc-4.6.3 \\ bin; c:\\ Program Files \\ R \\ R-3.0.2 \\ bin \\ x64; [其他]

然后,我拍攝了一個非常簡單的c ++文件(new.cpp),如下所示

include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int timesTwo(int x) {
return x * 2;
}

然后,我進入Powershell,並按照D. Eddelbuettel(第2章)在與Rcpp進行無縫R和C ++集成中的建議進行操作,我嘗試編譯代碼

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並鍵入“ R --version”時,會出現此錯誤

     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 

那是一個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做到了這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM