【问题标题】:cannot compile rinside with armadillo examples无法使用犰狳示例编译 rinside
【发布时间】:2013-07-02 10:16:29
【问题描述】:

我正在尝试使用 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里的代码和你用来编译的命令放在里面
  • 您应该考虑使用 Makefile 来简化您的编译过程并使其更易于理解。以/usr/local64/opt/R-2.15.2/lib/R/library/RInside/examples/armadillo/Makefile 为例。您使用哪个平台?
  • 我确实使用 Makefile。我只是按照您的要求复制粘贴了 makefile 使用的编译命令。 Linux 电脑
  • 我试过了,我也有问题...一旦找到解决方案,我会发布它。同时我希望@eddelbuettel 会阅读这个问题并为您提供适当的解决方案。对不起
  • 不用担心,感谢您的宝贵时间!

标签: c++ r rcpp armadillo rinside


【解决方案1】:

你得到的错误是因为Rcpp.h被包含在RcppArmadillo.h之前,Rcpp.hRInside.h包含。

对于RcppArmadillo 给你的魔力,文件RcppArmadillo.h 需要在Rcpp.h 之前加载。所以我建议你这样做:

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

【讨论】:

  • 该目录中的第二个示例也是如此,并且在 4 月提交了重新排序修复 - 从那以后我们还没有发布 RInside。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多