错误消息"未定义的引用boost(...)"添加cpp11插件时出现

时间:2018-05-22 13:48:59

标签: c++ r c++11 rcpp

在R中使用Rcpp编译我的.cpp文件时,会出现以下错误消息:

  

未定义对`boost :: system :: generic_category()'

的引用

但是当我删除// [[Rcpp::plugins(cpp11)]]行时,不再有任何错误。为什么呢?

这是我可重复的最小例子。

// include Rcpp, it takes care of most other headers you need
#include <Rcpp.h>
#include <boost/array.hpp>

// include Boost's odeint
#include <boost/numeric/odeint.hpp>
#include <boost/numeric/odeint/integrate/integrate_adaptive.hpp>
#include <boost/filesystem/fstream.hpp>
#include <functional>

// tell R you need Boost
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]

using namespace Rcpp;
using namespace std;
using namespace boost::numeric::odeint;

typedef boost::array< double ,130 > state_type;

// [[Rcpp::export]]
void my_fun22(Rcpp::NumericVector &x, const double t,const Rcpp::NumericVector theta){
  Function f("mod_cpp");
  x=f(_["t"]=t,_["x"]=x,_["p1"]=theta);
}

1 个答案:

答案 0 :(得分:1)

另一个基本问题:Boost系统(通常)需要链接,这是一个完全不同的球类游戏,而不仅仅是通过BH包指向Boost标题。标准错误消息undefined reference来自链接器/尝试定位符号失败。

我们在Rcpp Gallery的一些帖子中讨论了链接到Boost库的用法,但缺点是没有可移植方式来提供跨越Boost库的链接R使用的操作系统。