4

我正在尝试使用 Visual Studio 构建一个简单的 R 包,这是我的代码:

#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目录。我错过了什么?

谢谢!

4

1 回答 1

4

请允许我引用Rcpp FAQ小插曲:

我可以Rcpp与 Visual Studio 一起使用吗?

不是机会。

这不是因为我们是吝啬鬼,而是因为R和 Visual Studio 根本无法相处。与使用接口Rcpp扩展 一样,我们受到可用工具链的约束。而且根本不能用 Visual Studio 编译。如果您仍然不高兴,请向其供应商投诉。RC++R

微软或多或少不遗余力地确保其操作系统和工具不符合 POSIX。随着 R 在 Unix / POSIX 世界中成长,您根本无法(轻松地)弥合差距。

所以在 Windows 上是 gcc 的 MinGW 端口。

于 2015-12-02T22:01:55.100 回答