无法使用Armadillo示例编译RInside。

5

我正在尝试使用Rinside编译Rarmadillo示例,但一直出现以下错误:

In file included from rinside_arma0.cpp:8:0:
/usr/local64/opt/R-2.15.2/lib/R/library/RcppArmadillo/include/RcppArmadillo.h:26:6: error: #error "The file 'Rcpp.h' should not be included. Please correct to include only 'RcppArmadillo.h'."

我谷歌了一下,但是只找到了源代码本身。有什么想法吗?

代码如下:

// -*- c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*-
//
// Simple example using Armadillo classes
//
// Copyright (C) 2012  Dirk Eddelbuettel and Romain Francois

#include <RInside.h>                    // for the embedded R via RInside
#include <RcppArmadillo.h>

int main(int argc, char *argv[]) {

    RInside R(argc, argv);      // create an embedded R instance

    std::string cmd = "diag(3)";    // create a Matrix in r 

    arma::mat m = Rcpp::as<arma::mat>(R.parseEval(cmd)); // parse, eval + return result

    std::cout << m << std::endl;    // and use Armadillo i/o  

    exit(0);
}

并使用以下方式进行编译:

g++ -I/usr/local64/opt/R-2.15.2/lib/R/include -I/usr/local64/opt/R-2.15.2/lib/R/library/Rcpp/include -I"/usr/local64/opt/R-2.15.2/lib/R/library/RcppArmadillo/include"   -I/usr/local64/opt/R-2.15.2/lib/R/library/RInside/include -g -O2 -Wall -I/usr/local/include   rinside_arma0.cpp  -L/usr/local64/opt/R-2.15.2/lib/R/lib -lR  -lf77blas -latlas -llapack -L/usr/local64/opt/R-2.15.2/lib/R/library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/local64/opt/R-2.15.2/lib/R/library/Rcpp/lib -L/usr/local64/opt/R-2.15.2/lib/R/library/RInside/lib -lRInside -Wl,-rpath,/usr/local64/opt/R-2.15.2/lib/R/library/RInside/lib  -o rinside_arma0

你能把代码放在 rinside_arma0.cpp 文件中并提供编译所用的命令吗? - dickoa
你应该考虑使用Makefile来简化编译过程并使其更易于理解。例如,可以查看/usr/local64/opt/R-2.15.2/lib/R/library/RInside/examples/armadillo/Makefile。你使用哪个平台? - dickoa
我确实使用Makefile。正如您所要求的那样,我只是复制并粘贴了Makefile使用的编译命令。Linux PC - madreblu
我已经尝试过了,但是我还有一个问题...一旦我找到解决方案,我会发布它。同时,我希望@eddelbuettel能够看到这个问题并为您提供适当的解决方案。抱歉。 - dickoa
你尝试过在Rinside.h之前包含RcppArmadillo.h吗? - Romain Francois
哇,好厉害!把它作为答案,我会接受它的。 - madreblu
1个回答

10

你遇到的错误是因为在包含RcppArmadillo.h之前已经包含了Rcpp.h,而Rcpp.h则被RInside.h所包含。

为了使用RcppArmadillo提供的魔力,需要先加载RcppArmadillo.h文件,再加载Rcpp.h。因此,我建议你这样做:

#include <RcppArmadillo.h>
#include <RInside.h>

1
同样的情况也适用于该目录中的第二个示例,重新排序修复已在四月份提交 - 我们只是还没有发布RInside。 - Dirk Eddelbuettel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接