我正在尝试将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使用的软件包时做了一些特别的事情。 任何人都可以告诉我如何安装软件包这样有效吗?