如何在 C++ 中通过 Rcpp 使用 Boost 库

Posted

技术标签:

【中文标题】如何在 C++ 中通过 Rcpp 使用 Boost 库【英文标题】:How to use Boost library in C++ with Rcpp 【发布时间】:2013-04-21 13:10:55 【问题描述】:

我在 R 3.0.0 上使用 Rcpp 包。我正在尝试运行this example,但我不能,因为我不知道如何使用Boost

我在目录 /Users/giorgi/boost_1_53_0 中安装了 Boost,因此我设置了 Sys.setenv("PKG_CXXFLAGS"="-I /Users/giorgi/boost_1_53_0") 但我不确定我做的是否正确。对不起,我对这些东西一无所知!

【问题讨论】:

编译时是否出现特定错误,什么不工作? 【参考方案1】:

我会尝试一些事情:

    使用 Boost 编写一个三行独立的 C++ 程序,并对其进行编译。这只是为了向自己证明您拥有-I/some/dir 标志是正确的。

    编写一个简单的 Rcpp 函数并使用例如sourceCpp() 来编译和加载它。

    创建一个文件~/.R/Makevars 并将-I 标志从1. 这里设置为CXXFLAGSCFLAGS 之一,这两者都将被R CMD ... 使用,因此sourceCpp() .

    如果一切都失败了,创建一个小包并添加LinkingTo: BH,因为 CRAN 包 BH 提供了您可以使用的 Boost 标头(一旦您安装了 BH)。

编辑,大约 1 1/2 年后

您也可以在此代码中使用// [[Rcpp::depends(BH)]],例如

#include <Rcpp.h>
#include <boost/math/common_factor.hpp>  // included in BH  

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

using namespace Rcpp;

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

在我们同时更新了 Rcpp 和 BH 时,它的构建和运行都很好:

R> library(Rcpp)
R> sourceCpp("/tmp/simpleBoost.cpp")
R> computeGCD(6, 15)
[1] 3
R> 

【讨论】:

以上是关于如何在 C++ 中通过 Rcpp 使用 Boost 库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中通过 libSVM 使用 auto_train

如何在 C++ 中通过引用返回类对象?

如何在 C++ 中通过指针传递字符串?

如何分析 Rcpp 代码(在 linux 上)

如何在 C++ 中通过引用返回向量

如何访问在 C++ 中通过引用传递的列表/向量的元素