将C库链接到R

时间:2016-07-19 22:06:53

标签: c r makefile libxlsxwriter

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

让C库独立工作并不困难。我使用zlib下载了libxlsxwritermsys2,并在make文件夹中运行了libxlsxwriter

现在我可以运行这个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连接的任何建议?在这一点上,我只是试图从R运行hello-world示例。

xlsxwriter文件夹中使用inst开始构建程序包是一种更好的方法,然后尝试编写一个makevars来获取xlsxwriter编译正确吗?我知道我必须包括PKG_CPPFLAGS = -I../inst/libxlsxwriter,但我猜我还需要更多。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

这不会很优雅,但是如果四年来没有人找到一个优雅的解决方案,您不妨使用:

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

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

在这一点上,我只是想让示例世界从R运行。

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