在我开始更新gcc之前,有没有人真正尝试过这一点,他们可以确认从源代码构buildR需要更新用于编译c ++代码的gcc版本(即不一定用于包创作,当然不适用于CRAN-有效包)?
请参阅Dirk对此问题的回答,以及来自原始海报的后续评论如何在Windows上使用gcc 4.8.1与Rcpp 。
从源重建R
似乎没有必要。 以下是我用于Windows 7 x64
系统的步骤,使用Rtools 3.1.0.1942
运行R 3.1.1
。 这个更新对gcc
还没有经过彻底的测试:
remove.packages("Rcpp")
和其他任何Rcpp
相关。 关闭R会话。 更新系统PATH
变量以按照以下顺序(在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\;
第三个路径入口取代了Rtools
安装程序包含的一个: [Drive]:\Rtools\gcc-4.6.3\bin
重新启动或以其他方式反映PATH更改。
R
会话并运行install.packages("Rcpp")
并重复步骤1中删除的所有其他包。 遵循这些步骤使用R 3.1.1 (2014-07-10)
和Rcpp 0.11.2
。 使用rgui.exe
最容易,而不是像RStudio
这样的IDE,因为先前的工作空间和后者的软件包的静默载入。
通过在R
会话中运行system('gcc -v')
来测试设置以获得:
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
所提供的编译器错误的选择 ,以及使用gcc 4.8.*
在一个运行Rcpp::sourceCpp
的R
会话中测试一些新的C++11
功能gcc 4.8.*
下面的代码,保存为.cpp
文件,应该不会产生编译器警告或错误(而这将完全失败,使用gcc 4.6.3
):
#include <Rcpp.h> // [[Rcpp::plugins("cpp11")]] template<typename T> struct Wrap { int test2(int depth) { m_test++; std::vector<int> v = { 0, 1, 2, 3 }; return depth == 0? 1 : std::accumulate( v.begin(), v.end(), int(0), [=](int sub, int const&) { return sub + test2(depth - 1); }); } int m_test = 0; }; struct X { template <class T> static void bar() {} template <class T> void foo(T p) { [&] { bar<T>(); }; } }; // [[Rcpp::export]] double inheriting(int in_){ struct A { A(int u){ hello = u*u/2.0; }; double hello; }; struct B: A { using A::A; }; B b(in_); return(b.hello); } // [[Rcpp::export]] void test_lambda(int in_) { X x; x.foo(in_); } // [[Rcpp::export]] int test_bug_4_7_2(int in_){ Wrap<int> w; return w.test2(in_); }