Создание пакетов R (C API) с помощью Visual Studio

Я пытаюсь создать простой пакет R с помощью Visual Studio, вот мой код:

#include <R.h>
#include <Rinternals.h>

SEXP add(SEXP a, SEXP b) {
  SEXP result = PROTECT(allocVector(REALSXP, 1));
  REAL(result)[0] = asReal(a) + asReal(b);
  UNPROTECT(1);

  return result;
}

У меня установлена ​​среда выполнения R и RTools.

Когда я пытаюсь скомпилировать его, я получаю следующую ошибку ссылки:

error LNK2019: unresolved external symbol REAL referenced in function "struct SEXPREC * __cdecl add(struct SEXPREC *,struct SEXPREC *)" (?add@@YAPEAUSEXPREC@@PEAU1@0@Z)
error LNK2019: unresolved external symbol Rf_asReal referenced in function "struct SEXPREC * __cdecl add(struct SEXPREC *,struct SEXPREC *)" (?add@@YAPEAUSEXPREC@@PEAU1@0@Z)
error LNK2019: unresolved external symbol Rf_allocVector referenced in function "struct SEXPREC * __cdecl add(struct SEXPREC *,struct SEXPREC *)" (?add@@YAPEAUSEXPREC@@PEAU1@0@Z)
error LNK2019: unresolved external symbol Rf_protect referenced in function "struct SEXPREC * __cdecl add(struct SEXPREC *,struct SEXPREC *)" (?add@@YAPEAUSEXPREC@@PEAU1@0@Z)
error LNK2019: unresolved external symbol Rf_unprotect referenced in function "struct SEXPREC * __cdecl add(struct SEXPREC *,struct SEXPREC *)" (?add@@YAPEAUSEXPREC@@PEAU1@0@Z)

Что ж, я предполагаю, что мне не хватает некоторых двоичных файлов, необходимых для процесса связывания. Проблема в том, что я понятия не имею, где найти нужные .lib файлы. В папке установки среды выполнения R я могу найти каталог include, но не могу найти каталог lib. Что мне не хватает?

Спасибо!


person gipouf    schedule 02.12.2015    source источник
comment
Я не думаю, что в стандартных бинарных установках R есть нужные вам файлы. Я знаю, что пользователям *nix необходимо установить расширенный набор файлов, чтобы иметь доступ к правильным файлам заголовков.   -  person IRTFM    schedule 02.12.2015
comment
См. раздел руководства по установке и администрированию R на сайте набор инструментов Windows — в основном вам будет очень трудно использовать Visual Studio, и вместо этого вам нужно будет использовать Rtools на основе MinGW.   -  person Martin Morgan    schedule 02.12.2015
comment
Не могли бы вы попробовать VS2015, который изначально поддерживает R? Может быть, когда-нибудь проблема решится? Кстати, .C() может работать с VS, пример здесь.   -  person Patric    schedule 30.03.2016


Ответы (1)


Позвольте мне процитировать отрывок из часто задаваемых вопросов по Rcpp:

Можно ли использовать Rcpp с Visual Studio?

Не шанс.

И это не потому, что мы скупердяи, а потому, что R и Visual Studio просто не ладят. Поскольку Rcpp заключается в расширении R с помощью C++ интерфейсов, мы связаны доступной набором инструментов. А R просто не компилируется с Visual Studio. Идите жалуйтесь его продавцу, если вы все еще расстроены.

Microsoft более или менее изо всех сил старалась гарантировать, что ее ОС и инструменты не соответствуют POSIX. Поскольку R вырос в мире Unix / POSIX, просто существует пробел, который вы не можете преодолеть (легко).

Итак, в Windows это порт MinGW для gcc.

person Dirk Eddelbuettel    schedule 02.12.2015