Rus*_*Kax 5 c++ windows gcc r rcpp
在我开始更新gcc之前,有没有人真正尝试过这个,并且他们可以确认从源代码构建R是需要更新用于使用Rcpp编译c ++代码的gcc版本(即不一定用于包创作,当然不适用于CRAN有效包)?
请参阅Dirk对此问题的回答,以及原始海报如何在Windows上使用gc 4.8.1和Rcpp的后续评论.
R从源代码重建似乎没有必要.下面是我用一个步骤Windows 7 x64的系统,运行R 3.1.1与Rtools 3.1.0.1942.此更新的含义gcc尚未经过彻底测试:
remove.packages("Rcpp")以及其他任何Rcpp相关的事情.关闭R会话.更新系统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,而不是通过IDE,例如RStudio,由于前者工作空间和后者的包的静默加载.
通过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)
Run Code Online (Sandbox Code Playgroud)
要确认选择的编译器错误gcc 4.6.3 to 4.8.0不再存在,并且在以下代码运行的会话中测试一些C++11可用的新功能,保存为文件,应该不会生成编译器警告或错误(这将完全失败使用):gcc 4.8.*RRcpp::sourceCpp.cppgcc 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_);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |