Шаги компиляции для файла c ++ с заголовочным файлом Rcpp - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь этот код на gedit и компиляции компилятором g ++ на терминале.

#include <Rcpp.h>

using namespace Rcpp;
// [[Rcpp::export]]
double sumC(NumericVector x) {
  int n = x.size();
  double total = 0;

  for(int i = 0; i < n; ++i) {
    total += x[i];
  }
  return total;
}

// [[Rcpp::export]]
double meanC(NumericVector x) {
  return sumC(x) / x.size();
}

Произошла ошибка для заголовочного файла.

фатальная ошибка: Rcpp.h: нет такого файла или каталога

Я скомпилировал так: g ++ -I / usr / r1.cpp -o c0 -L / usr / -lRcpp Также я попробовал: g ++ -I / usr / lib / R / site-library / Rcpp / include / r1.cpp -o c0 -L / usr / lib / R / site-library / Rcpp / libs / -lRcpp . ТО, полученная ошибка как роковая

error: R.h: No such file or directory #include <R.h>

Locations:
 locate Rcpp.h:/usr/lib/R/site-library/Rcpp/include/Rcpp.h
 locate R.h:/usr/share/R/include/R.h

Я тоже пробовал с make file. Мой файл make:

all:
    g++ rcpp.cpp -o obj
compile: 

Я вложил все файлы заголовков в одну папку. Все еще получаю ошибки для Rcpp.

Кто-нибудь знает, как скомпилировать это через терминал?

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете скомпилировать этот файл с помощью

g++ -I/usr/share/R/include -I/usr/lib/R/site-library/Rcpp/include -c rcpp.cpp -o rcpp.o

Однако я не понимаю, почему вы хотите это сделать. Для того, чтобы такие функции C ++ могли вызываться из R, необходимо выполнить несколько дополнительных шагов:

  • Функции оболочки C ++, которые переводятся в интерфейс на основе R SEXP.
  • R функции-оболочки, которые вызывают функции оболочки C ++ через .Call().
  • Связывание всех объектных файлов в динамическую библиотеку, которую может загрузить R.
  • Загрузка библиотеки и функций оболочки R в R.

Все это автоматизируется с помощью sourceCpp() или при использовании Rcpp::compileAttributes() в контексте пакетов с использованием Rcpp, c.f. виньетки на атрибуты и пакеты .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...