Ошибка компиляции библиотеки R cpp с помощью g ++: R cpp .h не найден - PullRequest
0 голосов
/ 03 августа 2020

Я слежу за главой Хэдли о R cpp в Advanced R и не могу понять некоторых последствий использования R cpp для вызова функций C ++ в R.

В частности, почему файлы C ++, включая директивы:

#include <Rcpp.h>
using namespace Rcpp;

, приведут к ошибке Rcpp.h not found, если эти файлы скомпилированы с помощью g ++, как обычно, без участия R.

Является R cpp .h предназначен для вызова только из R, например, используя sourceCpp? Обратите внимание, что я хотел бы сохранить тот же самый файл C ++ для программ только на C ++, а также для пакета R, использующего R cpp, но предыдущая ошибка заставляет меня задаться вопросом, возможно ли это. Я что-то упустил?

Спасибо

Приложение

Это пример файла C ++ из книги. Он отлично работает при запуске Rcpp::sourceCpp("example.cpp"), но приведет к вышеупомянутой ошибке компиляции, если g++ -o example example.cpp используется с терминала (добавление main не исправляет этого). Версия g ++ - 10.1.0.

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double meanC(NumericVector x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
}
/*** R
library(microbenchmark)
x <- runif(1e5)
microbenchmark(
mean(x),
meanC(x)
)
*/

1 Ответ

2 голосов
/ 03 августа 2020

Это ошибка в вашем понимании.

если используется g++ -o example example.cpp

Нет документации R (о которой я знаю) утверждает, что вы можете это сделать. Если вы начнете с того места, где многие из нас рекомендуют начинать, а именно с руководства Writing R Extensions , которое также прилагается к вашей копии R, вы увидите, что эквивалентными командами будут

R CMD COMPILE somefile.cpp
R CMD SHLIB somefile.cpp

но те, что не учитывают дополнительную потребность в R cpp. Это на самом деле становится сложным.

Но делать все вручную - это хороший опыт, поэтому некоторые из моих старых семинаров делают это, как и моя книга по R cpp.

Тем не менее, никто не рекомендует делать это для реальной работы. Придерживайтесь того, что показано в виньетках R cpp Введение и, возможно, R cpp Атрибуты .

...