Сообщение об ошибке «Неопределенная ссылка на boost (...)» появляется при добавлении плагина cpp11 - PullRequest
0 голосов
/ 22 мая 2018

При компиляции моего файла .cpp с Rcpp в R появляется следующее сообщение об ошибке:

неопределенная ссылка на `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 голосов
/ 22 мая 2018

Еще одна элементарная проблема: для Boost System (как правило) требуется linking , которая представляет собой совершенно другую игру с мячом, чем просто указание на заголовки Boost через пакет BH.И очень стандартное сообщение об ошибке undefined reference исходит от компоновщика / неудачных попыток найти символ.

Мы обсуждаем использование ссылок на библиотеки Boost в некоторых публикациях в Rcpp Gallery ,но суть в том, что нет портативного способа для обеспечения связи с библиотеками Boost в операционных системах, используемых R.

...