在Windows上使用与Rtools一起使用的不同gcc版本和Rcpp

时间:2014-08-22 21:31:48

标签: c++ windows r gcc rcpp

在我开始更新gcc之前,有没有人真正尝试过这个,并且他们可以确认从源代码构建R需要更新用于使用Rcpp编译c ++代码的gcc版本(即不一定用于包创作,当然也不是CRAN有效的包裹?)

请参阅Dirk对此问题的回答,以及原始海报How to use gcc 4.8.1 with Rcpp on Windows中的后续评论。

2 个答案:

答案 0 :(得分:6)

从源代码重建R似乎没有必要。以下是我用于Windows 7 x64系统的步骤,R 3.1.1Rtools 3.1.0.1942一起运行。此更新对gcc的影响尚未经过全面测试:

  1. 开始一个干净的R会话,remove.packages("Rcpp")和其他任何Rcpp相关。关闭R会话。
  2. Link to MinGW-builds installer下载并运行MinGW版本。
  3. 选择gcc版本4.8.1 / Arch x64 / Threads posix / Exception sjlj / Build rev 5并安装到[Drive]:\ Rtools \ mingw-builds \ ...
  4. 更新系统PATH变量,按以下顺序(PATH顶部或附近)包含这些条目:[Drive]:\R\R-3.1.1\bin\x64;[Drive]:\Rtools\bin;[Drive]:\Rtools\mingw-build\x64-4.8.1-posix-sjlj-rev5\mingw64\bin\; 第3条路径条目替换 Rtools安装程序所包含的条目:[Drive]:\Rtools\gcc-4.6.3\bin

  5. 重启或以其他方式反映路径更改。

  6. 启动一个干净的R会话并运行install.packages("Rcpp")并重复执行步骤1中删除的所有其他包。
  7. 使用R 3.1.1 (2014-07-10)Rcpp 0.11.2一起执行了这些步骤。最简单的方法是使用rgui.exe进行此操作,而不是通过RStudio之类的IDE进行此操作,原因是先前工作空间和后者的包的静默加载。

    通过在system('gcc -v')会话中运行R来获取以下内容来测试设置:

    COLLECT_GCC=F:\Rtools\MINGW-~1\X64-48~1.1-P\mingw64\bin\gcc.exe
    COLLECT_LTO_WRAPPER=f:/rtools/mingw-~1/x64-48~1.1-p/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/4.8.1/lto-wrapper.exe
    Target: x86_64-w64-mingw32
    [Edited Config info]
    Thread model: posix
    gcc version 4.8.1 (rev5, Built by MinGW-W64 project) 
    

    要确认选择的编译器错误已不再存在gcc 4.6.3 to 4.8.0,以及测试C++11可用的一些新gcc 4.8.*功能,在以下代码上运行R的{​​{1}}会话保存为Rcpp::sourceCpp文件,不应生成编译器警告或错误(而使用.cpp完全失败):

    gcc 4.6.3

答案 1 :(得分:0)

在这里,我描述了如何在Rtools中使用 GCC v8.1.0 来编译R中的源程序包。

这已在带有R v3.5.0Rtools35的Windows 10 64位家庭版上进行了测试。

  1. 安装R
  2. 安装Rtools。默认安装位置为C:\Rtools。您将在Rtools中看到以下子文件夹:

删除mingw_64子文件夹中的所有内容。

  1. 通过如下编辑环境变量来设置路径,以使Rtools处于路径中:

  1. 现在去从this MinGW distro下载gcc。下载mingw-16.0-without-git.exe

无论安装在默认位置。请注意,它将安装在MinGW\文件夹中。复制/剪切此MinGW\文件夹中的内部中的任何内容。

  1. 转到mingw_64内的Rtools 子文件夹,然后粘贴在步骤3中复制/剪切的所有内容。粘贴后,您将看到以下内容:

  1. rdatatable控制台中通过以下几行测试您的设置,以编译R软件包R中的C / C ++代码:

    remove.packages("data.table")
    install.packages("data.table", type = "source",
    repos = "http://Rdatatable.github.io/data.table")
    

如果成功,您会发现以下内容:

它也从源头编译Rcpp

以博客here的形式查找相同的内容。