如何使用Rcpp和Rstudio运行任何c ++库?

时间:2017-11-07 21:47:44

标签: r

我正在尝试将C ++库与Rcpp和Rstudio一起使用。 我尝试使用的特定包是CGAL HERE

我让Rstudio和Rcpp在Widnows和Linux中工作,我使用了CGAL页面的安装说明。在linux中,它在添加依赖项后进行了安装。 在Windows中,它安装并创建了CGAL_DIR变量设置为C:\dev\CGAL-4.11并将C:\dev\CGAL-4.11\auxiliary\gmp\lib添加到我的PATH变量中,但我不知道它在linux框中添加了什么。

我已经阅读了有关添加Boost库How to use Boost library in C++ with Rcpp以及RcppEigen的内容,但事实证明这很简单,因为我只是在Rstudio中安装了包并使用// [[Rcpp::depends(BH)]]来使用它,但我不这样做理解为什么对于提升我需要完整的包含路径,例如#include <boost/math/common_factor.hpp>

这是我的基本测试代码,只要它没有CGAL就可以编译和运行。

#include <RcppArmadillo.h>
#include <RcppEigen.h>
#include <Rcpp.h>
#include <RcppCommon.h>
#include <boost/math/common_factor.hpp>
//#include <CGAL/basic.h>
//#include <CGAL/QP_models.h>
//#include <CGAL/QP_functions.h>

// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::depends(BH)]]
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(RcppEigen)]]

using namespace Rcpp;
using namespace std;
using namespace arma;
using namespace RcppEigen;


using Eigen::Map;
using Eigen::MatrixXd;
using Eigen::VectorXd;
using Eigen::SelfAdjointEigenSolver;

// [[Rcpp::export]]
VectorXd getEigenValues(Map<MatrixXd> M) {
  SelfAdjointEigenSolver<MatrixXd> es(M);
  return es.eigenvalues();
}

// [[Rcpp::export]]
int computeGCD(int a, int b) {
  return boost::math::gcd(a, b);
}

我相信我需要以某种方式告诉Rtools编译器找到CGAL库。 CGAL页面有Visual Studio的详细说明,但我不知道如何在Rstudio中这样做。

我尝试将CGAL文件夹复制到Rtools和RbuildTools文件夹中,这没有用。在Linux中我认为包含在usr /或usr / locals中,但我对如何找到它并不了解。

所有我对编译器的了解都是从rtools到Rstudio,它就像Rcpp一样有效。

修改, 我发现Rstudio在C:\Program Files\R\R-3.3.1\library\文件夹中安装了包,每个包都有一个文件夹和一个包文件夹。在我的示例中,BH或boost包在include文件夹中没有文件,但它有一个boost文件夹,其中包含一堆子文件夹,包括math,其中包含common_factor.hpp文件。

这解释了包含在R中的工作方式,所以我尝试将CGAL安装到Library文件夹,这样它的include文件夹就像其他所有内容一样处于下一级别。 但是,这不起作用。 Rcpp :: depends无法加载和/或无法找到它。

R工具或Rstudio似乎在安装允许R和Rcpp使用的软件包时做了一些特别的事情。 任何人都可以告诉我如何安装软件包这样有效吗?

0 个答案:

没有答案