【问题标题】:Linking C library to R将 C 库链接到 R
【发布时间】:2016-07-19 22:06:53
【问题描述】:

我最近发现了这个 C 库 (http://libxlsxwriter.github.io/),并尝试将它与 R 一起使用。

让 C 库自行工作并不难。我使用msys2 下载了zliblibxlsxwriter,并在libxlsxwriter 文件夹中运行了make

现在我可以运行这个 Hello-World 示例,我们称之为 test.c

#include "xlsxwriter.h"
void main() {
  lxw_workbook  *workbook  = workbook_new("myexcel.xlsx");
  lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
  int row = 0;
  int col = 0;
  worksheet_write_string(worksheet, row, col, "Hello me!", NULL);
  workbook_close(workbook);
}

现在我可以通过运行编译test.c

cc test.c -o test -lxlsxwriter -lz

然后运行可执行文件:

./test

现在我有一个 Hello-World excel 文档。

让它与 R 一起工作要复杂得多。如果我只是运行:

R CMD SHLIB test.c

我收到此错误:ibxlsxwriter/include/xlsxwriter/common.h:19:42: fatal error: xlsxwriter/third_party/queue.h: No such file or directory #include "xlsxwriter/third_party/queue.h"

但当我检查时,文件显然在那里。

关于如何将此 C 库与 R 连接的任何建议?在这一点上,我只是想让 hello-world 示例从 R 中运行。

inst 文件夹中使用xlsxwriter 开始构建一个包,然后尝试编写一个makevars 以使xlsxwriter 正确编译,这是不是更好的方法?我知道我必须包含PKG_CPPFLAGS = -I../inst/libxlsxwriter,但我猜我需要的不止这些。

【问题讨论】:

  • 查看R CMD config 寻找SHLIB_* 变量;在运行R CMD SHLIB之前将它们设置为指向适当的位置。

标签: c r makefile libxlsxwriter


【解决方案1】:

您可能想尝试 Continuum 的 Anaconda R 软件包。他们相当直接地使用 MSYS2 包。工具链包称为 m2w64-toolchain,而 posix 包有时也可用于构建 R 包。

conda install -c r r-essentials m2w64-toolchain posix

免责声明:我为 Continuum 工作,但我也在 MSYS2 上工作。

【讨论】:

    【解决方案2】:

    它不会优雅,但如果 4 年没有人找到优雅的解决方案,你不妨使用:

    shell("cc test.c -o test -lxlsxwriter -lz")
    

    这将有助于这部分以及任何小的需要立即访问 xlsx 功能

    此时我只是想让 hello-world 示例从 R 中运行。

    您可能已经知道这一点,但以防万一您没想过使用shell() 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      相关资源
      最近更新 更多