Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我如何告诉C++;我的R包需要C++;0x?_C++_R_C++11_Rcpp - Fatal编程技术网

C++ 我如何告诉C++;我的R包需要C++;0x?

C++ 我如何告诉C++;我的R包需要C++;0x?,c++,r,c++11,rcpp,C++,R,C++11,Rcpp,我已经编写并构建了一个R包,它依赖于Rcpp,需要C++0x标准(用于在C++中使用tgamma函数)。我已经在各种台式计算机和操作系统上测试了这个软件包,它似乎总是安装得很好,工作也很好。但是,我也希望在HPC服务器上使用该包。当我尝试使用R CMD install test(其中test是程序包的名称)在本地R库树中安装程序包时,我从编译器处收到以下错误消息: /Ur/Cu+/4.4.7/C++ +0xYActhult.H(31):灾难性错误:C++错误指令:该文件需要编译器和库支持,支持即

我已经编写并构建了一个R包,它依赖于
Rcpp
,需要
C++0x
标准(用于在C++中使用
tgamma
函数)。我已经在各种台式计算机和操作系统上测试了这个软件包,它似乎总是安装得很好,工作也很好。但是,我也希望在HPC服务器上使用该包。当我尝试使用
R CMD install test
(其中
test
是程序包的名称)在本地R库树中安装程序包时,我从编译器处收到以下错误消息:

/Ur/Cu+/4.4.7/C++ +0xYActhult.H(31):灾难性错误:C++错误指令:该文件需要编译器和库支持,支持即将到来的ISO C++标准C++ 0x。此支持目前处于试验阶段,必须使用-std=c++0x或-std=gnu++0x编译器选项启用。 #错误此文件需要编译器和库对即将到来的\ ^

Metropolis_Sampler_Beta_Edgewise_Cpp_Statistics.Cpp的编译已中止(代码4) make:**[Metropolis\u Sampler\u Beta\u Edgewise\u Cpp\u Statistics.o]错误4 错误:包“test”的编译失败

它基本上告诉我应该在调用编译器时启用C++0x支持(如post中所述)。然而,我认为将语句
CXX_STD=CXX11
添加到R包中的
src/Makevars
文件实际上会告诉编译器需要使用这个版本。事实上,在我尝试过的各种台式电脑上似乎都是如此。所以我的问题是:我如何告诉服务器上的编译器,这个C++版本应该用于编译?或者,我还可以如何安装该软件包

在服务器上,在尝试安装软件包之前,我通过在终端上输入
module load math/R
为R加载模块,它会报告已加载以下模块:

正在加载模块依赖项“编译器/intel/13.1”

正在加载模块依赖项“numlib/mkl/11.0.5”

编辑1:服务器是一个名为BUniCluster的德国大学集群。它基于KITE 2.0/RHEL6.5/Lustre 2.5.2。从上面的模块消息中可以看出,它似乎是英特尔C++编译器XE(ICPC)版本131.3。但事实上,我对编译器一无所知,所以如果您需要了解更具体的信息,请告诉我

编辑2在我尝试安装软件包之前,还可以在终端上执行
模块加载编译器/gnu/4.9
。这将导致以下错误消息(与上面的错误消息类似),这使我认为这不是版本问题:

/PFS/DATA1/Sudia/UB/PCW/PCU/GNU/4.92/BI/..…/Cyp+/4.+2/Tys/C++ 0xYAdvult.H(32):灾难性错误:O.I.错误指令:该文件需要C++和ISO C++ 2011标准的编译器和库支持。此支持目前处于试验阶段,必须使用-std=c++11或-std=gnu++11编译器选项启用。 #错误此文件需要编译器和库对\ ^

Metropolis_Sampler_Beta_Edgewise_Cpp_Statistics.Cpp的编译已中止(代码4) make:**[Metropolis\u Sampler\u Beta\u Edgewise\u Cpp\u Statistics.o]错误4 错误:包“test”的编译失败

编辑3:其中一条评论建议R包和R本身都需要使用相同的编译器版本进行编译。这是正确的吗?R是在这台机器上使用g++4.4.7构建的。这是否意味着唯一可行的解决方案是说服系统管理员使用其他4.9.2编译器重新编译R,并将其作为新模块提供?鉴于“手册”中的以下句子,我觉得很难相信这一点:

在这些平台上,有必要通过个人或站点Makevars文件为C++11选择不同的编译器


解决方案确实是在服务器上使用更新的编译器重新编译R,在本例中是Intel 14(如原始文章的编辑3所述)。系统管理员非常乐意为这个R版本设置一个新模块。

请集群系统管理员(可能安装GCC 4.9)或者,尝试在Linux笔记本电脑上编译您的东西(可能是静态链接。使用g++4.4。*你会有一段困难的时间。该编译器非常旧。我给当地的技术支持人员发送了三封电子邮件,但他从未回复。我将尝试在他的办公室找到他。也可以在终端上运行
模块加载编译器/gnu/4.9
,这将导致g++4.9.2,但我得到same错误消息。@Dirl Edelbuettel:您的评论是否也适用于g++4.9.2?g++4.9.*可以正常工作;请阅读“编写R扩展”正如我在你的另一个问题中告诉你的那样。你在这个集群上的问题可能是,你可能希望R和你的代码用同一个编译器编译,以便成功地进行动态链接。Viel Glueck。你不需要让管理员重新编译R-事实上,除非你为之奋斗,否则他们不可能满足你的请求。你可以自己做如果你可以访问服务器上的构建工具,只需获取源代码tar ball并按照说明进行操作。此外,我可能会大错特错,但从错误消息来看,它似乎只需要一些明确启用功能的标志