【问题标题】:Building R packages (C API) with Visual Studio使用 Visual Studio 构建 R 包 (C API)
【发布时间】:2016-03-07 01:26:32
【问题描述】:

我正在尝试使用 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 目录。我错过了什么?

谢谢!

【问题讨论】:

  • 我认为 R 的标准二进制安装没有您需要的文件。我知道 *nix 用户需要安装一组扩展的文件才能获得正确的头文件。
  • 请参阅the Windows toolset 上的 R 安装和管理手册部分——基本上,您将很难使用 Visual Studio,而需要使用基于 MinGW 的 Rtools。
  • 你能试试原生支持R的VS2015吗?也许这个问题可以在某个时候得到解决?顺便说一句,.C() 可以与 VS 一起使用,例如 here

标签: c r visual-studio visual-studio-2012 r-package


【解决方案1】:

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

我可以在 Visual Studio 中使用Rcpp 吗?

没有机会。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多