如何在 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. 这里设置为CXXFLAGS
或CFLAGS
之一,这两者都将被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 库的主要内容,如果未能解决你的问题,请参考以下文章