Как использовать библиотеку Boost на C++ с Rcpp

Я использую пакет Rcpp на R 3.0.0. Я пытаюсь запустить этот пример , но я не могу, потому что не знаю, как использовать Boost.

Я установил Boost в каталог /Users/giorgi/boostSys.setenv("PKG_CXXFLAGS"="-I /Users/giorgi/boost_1_53_0")53_0, поэтому я установил Sys.setenv("PKG_CXXFLAGS"="-I /Users/giorgi/boost_1_53_0"), но я не уверен, что поступаю правильно. Извините, но я совсем не разбираюсь в этом деле!


person user2304364    schedule 21.04.2013    source источник
comment
Вы получаете конкретную ошибку при компиляции, что не работает?   -  person Pankrates    schedule 21.04.2013


Ответы (1)


Я бы попробовал несколько вещей:

  1. Напишите автономную программу на C++ из трех строк, используя Boost, и скомпилируйте ее. Это просто для того, чтобы доказать себе, что у вас есть правильный флаг -I/some/dir.

  2. Напишите простую функцию Rcpp и используйте, например, sourceCpp() для ее компиляции и загрузки.

  3. Создайте файл ~/.R/Makevars и установите флаг -I из 1. здесь как один из CXXFLAGS или CFLAGS, оба из которых будут использоваться R CMD ... и, следовательно, sourceCpp().

  4. Если ничего не помогает, создайте небольшой пакет и добавьте LinkingTo: BH, поскольку пакет CRAN BH предоставляет заголовки Boost, которые вы можете использовать (после установки BH).

Редактировать, примерно полтора года спустя

Вы также можете использовать // [[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> 
person Dirk Eddelbuettel    schedule 21.04.2013