Before I embark on updating gcc, has anyone actually attempted this, and can they confirm building R from source is required to update the gcc version one uses to compile c++ code with Rcpp (i.e. not necessarily for package authoring and certainly not for CRAN-valid packages)?
See Dirk's answer to this question, and the follow-on comment from the original poster How to use gcc 4.8.1 with Rcpp on Windows.
Rebuilding R from source does not appear necessary. Here are the steps I used for a Windows 7 x64 system, running R 3.1.1 with Rtools 3.1.0.1942. The implications of this update to gcc have not been thoroughly tested:
remove.packages("Rcpp") and anything else Rcpp related. Close R session.Update the system PATH variable to include these entries in the following order (at or near the top of 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\;
the 3rd path entry replaces the one included by the Rtools installer: [Drive]:\Rtools\gcc-4.6.3\bin
Restart, or otherwise, to reflect PATH changes.
R session and run install.packages("Rcpp") and repeat for all the other packages that were removed in step 1.These steps have been followed using R 3.1.1 (2014-07-10) with Rcpp 0.11.2. It is easiest to do this using rgui.exe, and not via an IDE such as RStudio, due to the silent loading of previous workspaces and packages of the latter.
Test set-up by running system('gcc -v') in a R session to obtain:
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)
To confirm a selection of compiler bugs present with gcc 4.6.3 to 4.8.0 are no more, as well as test some new C++11 features available with gcc 4.8.*, in a R session running Rcpp::sourceCpp on the following code, saved as .cpp file, should generate no compiler warnings or errors (whereas this will totally fail using 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_);
}
Here I describe how we can use GCC v8.1.0 with Rtools to compile source packages in R.
This is tested on Windows 10 64 bit Home edition with R v3.5.0 and Rtools35.
C:\Rtools. You will see following subfolders inside Rtools:
Rtools is in path by editing environment variable as below:
mingw_64 subfolder inside Rtools.
Install in its default location. Note that by default, it will get installed in MinGW\ folder. Copy/Cut whatever is inside this MinGW\ folder.
mingw_64 subfolder inside Rtools and paste whatever been copied/cut in step 5. After pasting you will see this 👇 inside mingw_64 sub-folder:
Test your setup to compile C/C++ code in R package rdatatable with following lines in R console:
remove.packages("data.table")
install.packages("data.table", type = "source",
repos = "http://Rdatatable.github.io/data.table")
If successful, you will find something like this:

It compiles Rcpp from source too !
It can compile all R packages with compiled code, except those with dependencies on external libraries.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With